Build fail: unresolved external symbol mainCRTStartup
Leonid Popov
leonid.popov at oracle.com
Thu Nov 14 06:39:13 PST 2013
As Kevin reasonable noted, the problem was that 32-bit and 64-bit parts
were mixed up. I checked the build scripts and found that there were two
ways of getting the platform architecture there:
1. ext.OS_ARCH = System.getProperty("os.arch") in build.gradle
2. procarch = $$(PROCESSOR_ARCHITECTURE) $$(PROCESSOR_ARCHITEW6432) in
rt\modules\web\src\main\native\Source\JavaScriptCore\TargetJava.pri
At my PC, the former (via system property) returns "x86", while the
latter (via environment variables) results to "X86 AMD64". I guess this
makes a small part of the web module to be built in 64-bit mode, while
the rest is 32-bit, causing to the linkage error.
So, to build successfully, one can either install 64-bit JDK, or change
the build script for the two variables to match. I tried the both
approaches, the both worked.
Leonid
On 11/13/2013 7:09 PM, Stephen F Northover wrote:
> Ok, you can't say that and not tell us what the problem was!
>
> Steve
>
> On 2013-11-13 9:55 AM, Leonid Popov wrote:
>> Finally managed to build it with JDK 1.8-ea build 114 64 bit.
>>
>> On 11/12/2013 6:00 PM, Leonid Popov wrote:
>>> Thanks Kevin, but unfortunately it didn't help. Even having it
>>> cleaned completely, the build script still generates 32-bit
>>> YarrInterpreter.obj and then fails to link it to a 64-bit library.
>>> Still investigating.
>>>
>>> On 11/11/2013 8:43 PM, Kevin Rushforth wrote:
>>>> Hi Leonid,
>>>>
>>>> Building JavaFX on Windows requires Cygwin, so it doesn't surprise
>>>> me that it fails with a DOS shell.
>>>>
>>>> The error you are seeing on cygwin seems like a mismatch where part
>>>> of the build is trying to use a 32-bit build and part trying to use
>>>> 64-bit.
>>>>
>>>> My recommendation is to try the following, from a cygwin shell:
>>>>
>>>> 1. Ensure that your JAVA_HOME and PATH point to the same version of
>>>> Java (the 32-bit Java).
>>>>
>>>> 2. Completely clean your repo
>>>>
>>>> cd rt
>>>> gradle clean
>>>> rm -rf buildSrc/build buildSrc/.gradle .gradle
>>>>
>>>>
>>>> 3. Rebuild, making sure you compile both media and webkit (not sure
>>>> if needed, but better to remove one more variable):
>>>>
>>>> gradle -PCOMPILE_WEBKIT=true -PCOMPILE_MEDIA=true sdk
>>>>
>>>>
>>>> See if the above will work.
>>>>
>>>> -- Kevin
>>>>
>>>>
>>>> Leonid Popov wrote:
>>>>> Hi Steve,
>>>>>
>>>>> Yes, I use 32-bit JDK for building. I tried to build it from both
>>>>> Windows and Cygwin command shells. The error I mentioned happens
>>>>> when building from Windows. If I try to build it from Cygwin, I
>>>>> get another error:
>>>>>
>>>>> Building Webkit configuration /Release/ into
>>>>> C:\javafx\8my\jfx\rt\modules\web\build/win
>>>>> Calling 'qmake -makefile
>>>>> C:/javafx/8my/jfx/rt/modules/web/src/main/native/Source/WebKitJava.pro
>>>>> CONFIG-=debug CONFIG+=release DEFINES+=IMAGEIO=1' in
>>>>> "C:/javafx/8my/jfx/rt/modules/web/build/win/Release" ...
>>>>>
>>>>>
>>>>> Microsoft (R) Program Maintenance Utility Version 10.00.30319.01
>>>>> Copyright (C) Microsoft Corporation. All rights reserved.
>>>>>
>>>>> cd JavaScriptCore\ && C:\MsVS10\VC\BIN\nmake.exe -f
>>>>> Makefile.JavaScriptCoreJava
>>>>>
>>>>> Microsoft (R) Program Maintenance Utility Version 10.00.30319.01
>>>>> Copyright (C) Microsoft Corporation. All rights reserved.
>>>>>
>>>>> lib /NOLOGO /OUT:..\lib\JavaScriptCoreJava.lib @.\nm2BB0.tmp
>>>>> obj\YarrInterpreter.obj : fatal error LNK1112: module machine type
>>>>> 'X86' conflicts with target machine type 'x64'
>>>>> NMAKE : fatal error U1077: 'C:\MsVS10\VC\BIN\lib.EXE' : return
>>>>> code '0x458'
>>>>> Stop.
>>>>> NMAKE : fatal error U1077: 'cd' : return code '0x2'
>>>>> Stop.
>>>>>
>>>>> My script for Cygwin is:
>>>>>
>>>>> export DXSDK_DIR=/cygdrive/c/DXSDK/
>>>>> export WMSDK_DIR=/cygdrive/c/WMSDK/WMFSDK11/
>>>>> export QTSDK_DIR=/cygdrive/c/Qt/4.6.0/
>>>>>
>>>>> export VSINSTALLDIR=/cygdrive/C/MsVS10
>>>>> export WINDOWS_VS_PATH=/cygdrive/C/MsVS10/VC/bin
>>>>>
>>>>> export GRADLE_DIR=/cygdrive/c/tools/gradle/
>>>>>
>>>>> export JDK_HOME=/cygdrive/c/java/8b112/
>>>>> export JAVA_HOME=$JDK_HOME
>>>>>
>>>>> export ANT_HOME=/cygdrive/c/ant/
>>>>>
>>>>> export
>>>>> PATH=$GRADLE_DIR/bin/:$JAVA_HOME/bin/:$DXSDK_DIR/Utilities/Bin/x86:$PATH
>>>>>
>>>>>
>>>>> $GRADLE_DIR/bin/gradle -PCOMPILE_WEBKIT=true -PCONF=Debug sdk
>>>>>
>>>>> I'm trying but I can't realize what changed after my last
>>>>> successfull build.
>>>>>
>>>>> Leonid.
>>>>>
>>>>>
>>>>> On 11/8/2013 9:10 PM, Stephen F Northover wrote:
>>>>>> Hi Leonid,
>>>>>>
>>>>>> I have the same configuration as you I think. I'm just making
>>>>>> sure I can build. First, do you have 32-bit JDK8? Are you
>>>>>> running under a cygwin shell? What is your gradle command line?
>>>>>>
>>>>>> Steve
>>>>>>
>>>>>> On 2013-11-08 9:08 AM, Leonid Popov wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> I've just cloned a new workspace from
>>>>>>> ssh://jfxsrc.us.oracle.com//javafx/8.0/scrum/graphics/jfx and
>>>>>>> tried to build it. The following error encountered:
>>>>>>>
>>>>>>> link /LIBPATH:"..\lib" /NOLOGO /MAP /INCREMENTAL:NO
>>>>>>> /SUBSYSTEM:CONSOLE /MANIFEST
>>>>>>> /MANIFESTFILE:"obj\DerivedSourcesJava.intermediate.manifest"
>>>>>>> /OUT:..\lib\DerivedSourcesJava.exe
>>>>>>> @C:\Users\lp154592\AppData\Local\Temp\nm9A16.tmp
>>>>>>> LINK : error LNK2001: unresolved external symbol mainCRTStartup
>>>>>>> ..\lib\DerivedSourcesJava.exe : fatal error LNK1120: 1
>>>>>>> unresolved externals
>>>>>>>
>>>>>>> My box is Windows 7 64-bit with MSVS 10 installed; Gradle 1.4 is
>>>>>>> used for building.
>>>>>>>
>>>>>>> Any suggestions?
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Leonid
>>>>>>
>>>>>
>>>
>>
>
More information about the openjfx-dev
mailing list