【求助】从win32向win64移植程序,link时产生的问题
我在windowsXP下要为所写的插件生成dll文件。
编译和链接都使用的是命令行的形式写的,没有使用IDE环境。用VS2008 C++编译器编译。
在win32下,我是这样写的(省略号忽略太多行):
set include=....;%mypath%\3rdparty\win32
set LIB=%VCInstallDir%\lib;...;%mypath%\3rdparty\win32
cl -EHsc -W3 -D"WIN32" -D"PLATFORM_WINDOWS" -D"NDEBUG" -D"_WINDLL" -D"_MBCS" -D"ocean_EXPORTS" ^
-MT -LD MyPlunin.cpp libfftw3f-3.lib blitz.lib
编译结果:
Creating library MyPlunin.lib and object MyPlunin.exp
一切正常,最后得到MyPlunin.dll,可以正常使用。
在win7(x64)下,我是这样写的:
set include=....;%mypath%\3rdparty\win64
set LIB=%VCInstallDir%\lib\amd64;...;%mypath%\3rdparty\win64
cl -EHsc -W3 -D"WIN64" -D"PLATFORM_WINDOWS" -D"NDEBUG" -D"_WINDLL" -D"_MBCS" -D"ocean_EXPORTS" ^
-MT -LD MyPlunin.cpp libfftw3f-3.lib blitz.lib
编译结果(为什么x64下会链接失败呢,我的库路径检查过几遍了,自认为没有错误):
Creating library MyPlunin.lib and object MyPlunin.exp
libcpmt.lib(xmtx.obj) : error LNK2019: unresolved external symbol __imp_Sleep referenced in function _Once
LIBCMT.lib(crtheap.obj) : error LNK2001: unresolved external symbol __imp_Sleep
LIBCMT.lib(crt0dat.obj) : error LNK2001: unresolved external symbol __imp_Sleep
libcpmt.lib(xmtx.obj) : error LNK2019: unresolved external symbol __imp_InitializeCriticalSection referenced in function _Mtxinit
libcpmt.lib(xmtx.obj) : error LNK2019: unresolved external symbol __imp_DeleteCriticalSection referenced in function _Mtxdst
LIBCMT.lib(ioinit.obj) : error LNK2001: unresolved external symbol __imp_DeleteCriticalSection
LIBCMT.lib(mlock.obj) : error LNK2001: unresolved external symbol __imp_DeleteCriticalSection
LIBCMT.lib(closeall.obj) : error LNK2001: unresolved external symbol __imp_DeleteCriticalSection
libcpmt.lib(xmtx.obj) : error LNK2019: unresolved external symbol __imp_EnterCriticalSection referenced in function _Mtxlock
........这里显示不下了,都忽略了,基本都是libcpmt.lib和LIBCMT.lib的链接错误
MyPlunin.dll : fatal error LNK1120: 90 unresolved externals x64库链接 library
[解决办法]
%WindowsSdkDir%lib <- 这个是32位库的路径
靠前的路径优先级高,所以你把32位的路径放前面,在32位路径里找到库文件就不会再
在后面的64位路径里找了。