none
請問 error LNK1112 相關問題 [求救] RRS feed

  • 問題

  • 我透過 Visual Studio 2005 在進行 google gears 的 building 時

    遇到以下錯誤訊息:

     

    link /NOLOGO /OUT:bin-opt/wince-arm/ie/gears.dll /DEBUG /RELEASE /MACHINE:THUMB
    /NODEFAULTLIBTongue Tiedecchk.lib /NODEFAULTLIBSurpriseldnames.lib /INCREMENTAL:NO /OPT:REF /OP
    T:ICF /DLL /SUBSYSTEM:WINDOWSCE,5.01 /PDB:"bin-opt/wince-arm/ie/gears.pdb" /DEF:
    tools/mscom.def bin-opt/wince-arm/ie/module.res  bin-opt/wince-arm/ie/string_tab
    le.res  bin-opt/wince-arm/ie/ui_resources.res  bin-opt/wince-arm/ie/setup.res  w
    ininet.lib ceshell.lib coredll.lib corelibc.lib ole32.lib oleaut32.lib uuid.lib
    commctrl.lib atlosapis.lib piedocvw.lib cellcore.lib htmlview.lib imaging.lib to
    olhelp.lib aygshell.lib iphlpapi.lib gpsapi.lib  @bin-opt/obj_list.temp
    bin-opt/wince-arm/ie/async_router.obj : fatal error LNK1112: 模組電腦類型 'X86'
    與目標電腦類型 'THUMB' 衝突
    make[1]: *** [bin-opt/wince-arm/ie/gears.dll] Error 1112
    make: *** [default] Error 2

    看到許多網路上的文章提到 LNK1112 的解決方式都是經由 VS 的 IDE 介面去調整設定

    或是在建立專案時就要選擇行動裝置專案

    但是 google gears 並不是用 VS project 所寫成,只能用 command line mode 下去編譯

    例如,async_router.obj 的產生方式為:

     

    cl -I.. -Ibin-opt/wince-arm/ie -Ibin-opt/wince-arm/common -I../third_party/npapi
     -I../third_party -I../third_party/googleurl -I../third_party/icu38/public/commo
    n -DPNG_USER_CONFIG -I../third_party/zlib -DNO_GZIP -DNO_GZCOMPRESS -DNO_ERRNO_H
     -I../third_party/breakpad/src -I../third_party/libgd /nologo -DSTRICT -D_UNICOD
    E -DUNICODE -D_USRDLL -DWIN32 -D_WINDLL -D_CRT_SECURE_NO_DEPRECATE -DNOMINMAX -D
    _WIN32_WCE=0x501 -DWINVER=_WIN32_WCE -DUNDER_CE=0x501 -DWINCE -DWIN32_PLATFORM_P
    SPC -DARM -D_ARM_ -DPOCKETPC2003_UI_MODEL -D_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN
    _MTA -D_CE_CRT_ALLOW_WIN_MINMAX   -DNDEBUG=1 -DUSING_CCTESTS=1 -I../third_party/
    gtest/include -I../third_party/gtest /c /Fo"bin-opt/wince-arm/ie/async_router.ob
    j" /Fd"bin-opt/wince-arm/ie/async_router.pdb" /W3 /WX /GR- /MT  /Zi /Zc:wchar_t-
     /O2 -D_HAS_EXCEPTIONS=0 -D_ATL_NO_EXCEPTIONS -DU_STATIC_IMPLEMENTATION /TP /J -
    DBROWSER_IE=1 -DJS_THREADSAFE   base/common/async_router.cc

     

    用這種方式,我懷疑所使用到的 cl 是 bin\cl ,而不是 ce\bin\x86_arm\cl

    請問我應該如何在 command line 模式下進行 THUMB 的編譯呢?

    是否此處需要 ce\bin\x86_arm\cl 而非 bin\cl 呢?

     

    希望有人能協助,感恩 !!

    2008年9月19日 上午 04:18

解答

  • 看一下你在command line的時後 path 的設定吧

    打path 看你的 VC\bin 指向那個路徑

    或是看一下 cl的 message 它會有 title 給 arm用的會 出現 Version xx.xx.xxxxx for ARM

    VS2005 內建的 vcvarsall.bat 只有

    if /i %1 == x86       goto x86
    if /i %1 == amd64     goto amd64
    if /i %1 == x64       goto amd64
    if /i %1 == ia64      goto ia64
    if /i %1 == x86_amd64 goto x86_amd64
    if /i %1 == x86_ia64  goto x86_ia64

    你可能須要自己依情況選個當 temp. 去改成 x86_arm

     

    update:

    剛剛已經在命令列Rebuild v0.4.22.0 成功(OS=wince), 問題主要應該就是還境的設定(path/include/lib/libpath) 另外就是要 disable warring D4819

    Code Snippet

    log.

    link /NOLOGO /OUT:bin-opt/wince-arm/ie/gears.dll /DEBUG /RELEASE /MACHINE:THUMB
    /NODEFAULTLIB:secchk.lib /NODEFAULTLIB:oldnames.lib /INCREMENTAL:NO /OPT:REF /OP
    T:ICF /DLL /SUBSYSTEM:WINDOWSCE,5.01 /PDB:"bin-opt/wince-arm/ie/gears.pdb" /DEF:
    tools/mscom.def bin-opt/wince-arm/ie/module.res  bin-opt/wince-arm/ie/string_tab
    le.res  bin-opt/wince-arm/ie/ui_resources.res  bin-opt/wince-arm/ie/setup.res  w
    ininet.lib ceshell.lib coredll.lib corelibc.lib ole32.lib oleaut32.lib uuid.lib
    commctrl.lib atlosapis.lib piedocvw.lib cellcore.lib htmlview.lib imaging.lib to
    olhelp.lib aygshell.lib iphlpapi.lib gpsapi.lib  @bin-opt/obj_list.temp
       Creating library bin-opt/wince-arm/ie/gears.lib and object bin-opt/wince-arm/
    ie/gears.exp
    uuid.lib(urlmon_i_guid27.obj) : warning LNK4099: PDB 'dummy.pdb' was not found w
    ith 'C:\Program Files\Windows Mobile 6 SDK\PocketPC\Lib\Armv4i\uuid.lib' or at '
    C:\gg\gears\bin-opt\wince-arm\ie\dummy.pdb'; linking object as if no debug info
    uuid.lib(urlmon_i_guid19.obj) : warning LNK4099: PDB 'dummy.pdb' was not found w
    ith 'C:\Program Files\Windows Mobile 6 SDK\PocketPC\Lib\Armv4i\uuid.lib' or at '
    C:\gg\gears\bin-opt\wince-arm\ie\dummy.pdb'; linking object as if no debug info
    uuid.lib(urlmon_i_guid17.obj) : warning LNK4099: PDB 'dummy.pdb' was not found w
    ith 'C:\Program Files\Windows Mobile 6 SDK\PocketPC\Lib\Armv4i\uuid.lib' or at '
    C:\gg\gears\bin-opt\wince-arm\ie\dummy.pdb'; linking object as if no debug info
    uuid.lib(urlmon_i_guid16.obj) : warning LNK4099: PDB 'dummy.pdb' was not found w
    ith 'C:\Program Files\Windows Mobile 6 SDK\PocketPC\Lib\Armv4i\uuid.lib' or at '
    C:\gg\gears\bin-opt\wince-arm\ie\dummy.pdb'; linking object as if no debug info
    uuid.lib(shguids_guid25.obj) : warning LNK4099: PDB 'dummy.pdb' was not found wi
    th 'C:\Program Files\Windows Mobile 6 SDK\PocketPC\Lib\Armv4i\uuid.lib' or at 'C
    :\gg\gears\bin-opt\wince-arm\ie\dummy.pdb'; linking object as if no debug info
    uuid.lib(msxml2_i_guid59.obj) : warning LNK4099: PDB 'dummy.pdb' was not found w
    ith 'C:\Program Files\Windows Mobile 6 SDK\PocketPC\Lib\Armv4i\uuid.lib' or at '
    C:\gg\gears\bin-opt\wince-arm\ie\dummy.pdb'; linking object as if no debug info
    LIBCMT.lib(gshandler.obj) : warning LNK4099: PDB 'libbmt.pdb' was not found with
     'C:\Program Files\Microsoft Visual Studio 8\VC\ce\lib\armv4i\LIBCMT.lib' or at
    'C:\gg\gears\bin-opt\wince-arm\ie\libbmt.pdb'; linking object as if no debug info

     

     

     

    不過也看到有用 IDE Build的方法

    不過沒試過 .\tools\gen_vs_project.py  .\tools\script

     

    2008年9月19日 上午 06:06

所有回覆

  • 看一下你在command line的時後 path 的設定吧

    打path 看你的 VC\bin 指向那個路徑

    或是看一下 cl的 message 它會有 title 給 arm用的會 出現 Version xx.xx.xxxxx for ARM

    VS2005 內建的 vcvarsall.bat 只有

    if /i %1 == x86       goto x86
    if /i %1 == amd64     goto amd64
    if /i %1 == x64       goto amd64
    if /i %1 == ia64      goto ia64
    if /i %1 == x86_amd64 goto x86_amd64
    if /i %1 == x86_ia64  goto x86_ia64

    你可能須要自己依情況選個當 temp. 去改成 x86_arm

     

    update:

    剛剛已經在命令列Rebuild v0.4.22.0 成功(OS=wince), 問題主要應該就是還境的設定(path/include/lib/libpath) 另外就是要 disable warring D4819

    Code Snippet

    log.

    link /NOLOGO /OUT:bin-opt/wince-arm/ie/gears.dll /DEBUG /RELEASE /MACHINE:THUMB
    /NODEFAULTLIB:secchk.lib /NODEFAULTLIB:oldnames.lib /INCREMENTAL:NO /OPT:REF /OP
    T:ICF /DLL /SUBSYSTEM:WINDOWSCE,5.01 /PDB:"bin-opt/wince-arm/ie/gears.pdb" /DEF:
    tools/mscom.def bin-opt/wince-arm/ie/module.res  bin-opt/wince-arm/ie/string_tab
    le.res  bin-opt/wince-arm/ie/ui_resources.res  bin-opt/wince-arm/ie/setup.res  w
    ininet.lib ceshell.lib coredll.lib corelibc.lib ole32.lib oleaut32.lib uuid.lib
    commctrl.lib atlosapis.lib piedocvw.lib cellcore.lib htmlview.lib imaging.lib to
    olhelp.lib aygshell.lib iphlpapi.lib gpsapi.lib  @bin-opt/obj_list.temp
       Creating library bin-opt/wince-arm/ie/gears.lib and object bin-opt/wince-arm/
    ie/gears.exp
    uuid.lib(urlmon_i_guid27.obj) : warning LNK4099: PDB 'dummy.pdb' was not found w
    ith 'C:\Program Files\Windows Mobile 6 SDK\PocketPC\Lib\Armv4i\uuid.lib' or at '
    C:\gg\gears\bin-opt\wince-arm\ie\dummy.pdb'; linking object as if no debug info
    uuid.lib(urlmon_i_guid19.obj) : warning LNK4099: PDB 'dummy.pdb' was not found w
    ith 'C:\Program Files\Windows Mobile 6 SDK\PocketPC\Lib\Armv4i\uuid.lib' or at '
    C:\gg\gears\bin-opt\wince-arm\ie\dummy.pdb'; linking object as if no debug info
    uuid.lib(urlmon_i_guid17.obj) : warning LNK4099: PDB 'dummy.pdb' was not found w
    ith 'C:\Program Files\Windows Mobile 6 SDK\PocketPC\Lib\Armv4i\uuid.lib' or at '
    C:\gg\gears\bin-opt\wince-arm\ie\dummy.pdb'; linking object as if no debug info
    uuid.lib(urlmon_i_guid16.obj) : warning LNK4099: PDB 'dummy.pdb' was not found w
    ith 'C:\Program Files\Windows Mobile 6 SDK\PocketPC\Lib\Armv4i\uuid.lib' or at '
    C:\gg\gears\bin-opt\wince-arm\ie\dummy.pdb'; linking object as if no debug info
    uuid.lib(shguids_guid25.obj) : warning LNK4099: PDB 'dummy.pdb' was not found wi
    th 'C:\Program Files\Windows Mobile 6 SDK\PocketPC\Lib\Armv4i\uuid.lib' or at 'C
    :\gg\gears\bin-opt\wince-arm\ie\dummy.pdb'; linking object as if no debug info
    uuid.lib(msxml2_i_guid59.obj) : warning LNK4099: PDB 'dummy.pdb' was not found w
    ith 'C:\Program Files\Windows Mobile 6 SDK\PocketPC\Lib\Armv4i\uuid.lib' or at '
    C:\gg\gears\bin-opt\wince-arm\ie\dummy.pdb'; linking object as if no debug info
    LIBCMT.lib(gshandler.obj) : warning LNK4099: PDB 'libbmt.pdb' was not found with
     'C:\Program Files\Microsoft Visual Studio 8\VC\ce\lib\armv4i\LIBCMT.lib' or at
    'C:\gg\gears\bin-opt\wince-arm\ie\libbmt.pdb'; linking object as if no debug info

     

     

     

    不過也看到有用 IDE Build的方法

    不過沒試過 .\tools\gen_vs_project.py  .\tools\script

     

    2008年9月19日 上午 06:06
  • 非常感謝您
    不知道可否將您的環境設定提供給我參考呢

    我在調整設定後出現大量的錯誤,不知道是哪裡沒有設好

    我是設在 Common7\Tools\vsvars32.bat,內容為:

     

    @SET VSINSTALLDIR=C:\Program Files\Microsoft Visual Studio 8
    @SET VCINSTALLDIR=C:\Program Files\Microsoft Visual Studio 8\VC
    @SET FrameworkDir=C:\WINDOWS\Microsoft.NET\Framework
    @SET FrameworkVersion=v2.0.50727
    @SET FrameworkSDKDir=C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0
    @if "%VSINSTALLDIR%"=="" goto error_no_VSINSTALLDIR
    @if "%VCINSTALLDIR%"=="" goto error_no_VCINSTALLDIR

    @echo Setting environment for using Microsoft Visual Studio 2005 x86 tools.

    @rem
    @rem Root of Visual Studio IDE installed files.
    @rem
    @set DevEnvDir=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE

    @set PATH=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\ce\bin\x86_arm;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\bin;C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\bin;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;%PATH%
    @set INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\sys;C:\Program Files\Microsoft Visual Studio 8\VC\ce\atlmfc\include;C:\Program Files\Microsoft Visual Studio 8\VC\ce\include;C:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\INCLUDE;C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Include\Armv4i;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include;%INCLUDE%
    @set LIB=C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\sys;C:\Program Files\Microsoft Visual Studio 8\VC\ce\atlmfc\lib\armv4i;C:\Program Files\Microsoft Visual Studio 8\VC\LIB;C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Lib\ARMV4I;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;%LIB%
    @set LIBPATH=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\ce\atlmfc\lib\armv4i

    @goto end

    :error_no_VSINSTALLDIR
    @echo ERROR: VSINSTALLDIR variable is not set.
    @goto end

    :error_no_VCINSTALLDIR
    @echo ERROR: VCINSTALLDIR variable is not set.
    @goto end

    :end

     

    此外,gen_vs_project.py 的方法應該問題會較少

    我會試試看的,謝謝

    2008年9月19日 下午 06:28
  • 您好,我已經將環境設定好可以 build 成功了
    但是到了 link ,也會出現跟您一樣的 LNK4099 問題
    所以安裝檔沒有辦法作出來

    不知道這種問題該如何解決呢?

     

    謝謝

     

    P.S. 使用 gen_vs_project.py 所產生的 project,一樣有很多地方要自己設定

    包括 preprocessor 要設一些STRICT;_UNICOD;UNICODE;_USRDLL -DWIN32; .... 之類的東西

    沒設好通常會很嚴重

    看來並不會比較容易 build,而且很難說不會碰到一樣的 LNK4099 錯誤

     

    wekon

    2008年9月19日 下午 10:22
  • make 查不到 cabwiz 就不會自動去建 install cab 這可以從 makefiles 看出來

    所以請在 path 加上 C:\Program Files\Windows Mobile 6 SDK\Tools\CabWiz or

    C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SDKTools

    這樣就可以了 Re-make 或是 make installer OS=wince MODE=opt

    linkek warring 可以不用管它 gears.dll & setup.dll 有build 出來就好

    因為那缺的檔案 應該只有 MSFT 才會有 那只是缺少 symbol link for debug information 並不影響一般執行

     

     

     

     

     

    2008年9月20日 上午 12:52
  • 感謝您,目前問題已經順利解決了 !!

     

    2008年9月20日 上午 08:54