我正在尝试构建一个Python扩展,它连接到APR.,这次是在MS Windows上…(它在Linux上工作)。
这里是生成失败、命令和输出格式可读的地方:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\link.exe
/nologo
/INCREMENTAL:NO
/LTCG
/DLL
/MANIFEST:EMBED,ID=2
/MANIFESTUAC:NO
/LIBPATH:c:\dev\protopy\lib/apr
/LIBPATH:c:\bin\python\Libs
/LIBPATH:c:\dev\protopy\.venv\libs
/LIBPATH:c:\dev\protopy\.venv\PCbuild\amd64
"/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB\amd64"
"/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.10240.0\ucrt\x64"
"/LIBPATH:C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x64"
apr-1.lib
/EXPORT:PyInit_wrapped build\temp.win-amd64-3.6\Release\protopy/lib/descriptors.obj
build\temp.win-amd64-3.6\Release\protopy/lib/binparser.obj
build\temp.win-amd64-3.6\Release\protopy/lib/defparser.obj
build\temp.win-amd64-3.6\Release\protopy/lib/protopy.lex.obj
build\temp.win-amd64-3.6\Release\protopy/lib/protopy.tab.obj
build\temp.win-amd64-3.6\Release\protopy/lib/pyhelpers.obj
build\temp.win-amd64-3.6\Release\protopy/lib/list.obj
build\temp.win-amd64-3.6\Release\protopy/wrapper.obj
/OUT:build\lib.win-amd64-3.6\protopy\wrapped.cp36-win_amd64.pyd
/IMPLIB:build\temp.win-amd64-3.6\Release\protopy/lib\wrapped.cp36-win_amd64.lib
wrapper.obj : warning LNK4197: export 'PyInit_wrapped' specified multiple times; using first specification
Creating library build\temp.win-amd64-3.6\Release\protopy/lib\wrapped.cp36-win_amd64.lib \
and object build\temp.win-amd64-3.6\Release\protopy/lib\wrapped.cp36-win_amd64.exp
descriptors.obj : error LNK2001: unresolved external symbol \
__imp_apr_hash_set
(它实际上忽略了我使用过的所有符号,而不仅仅是这个符号)。
我已经建立了
apr-1.lib
通过运行
nmake -f Makefile.win
在apr的顶级目录中,这是我如何生成的
libapr-1.lib
. 然后我改名为
APL-1.LIB
把它放进去
c:\dev\protopy\lib/apr
,因此链接器实际上能够找到它,但找不到所需的符号…
问题1
我怎样才能看到图书馆里有什么符号?(也许我编错了?)
好的,我找到了
dumpbin.exe
,但现在我看到
APL-1.LIB
被称为
__imp__apr_hash_set
(注意第二个双下划线),但是链接器查找
__imp_apr_hash_set
(单下划线)。给出了什么?它们是用相同的编译器/链接器编译的…
问题2
在ms-windows上构建python扩展有什么特别之处使其以这种方式工作吗?(我这辈子只试过一次,没能成功,但原因不同)。