簡體   English   中英

使用 setup.py 鏈接 library.lib

[英]Link library.lib using setup.py

我想使用setup.py編譯一個庫以在我的 python package 中使用。 我正在編譯的庫是在 windows 上使用vcpkg安裝的。在編譯期間我遇到了這個錯誤error LNK2001: unresolved external symbol OGR_GT_Flatten這表明我必須鏈接gdal.lib 所以我搜索了一下,發現我可以使用以下兩種方法來做到這一點。 1- 對cl.exe使用/LINK命令,我使用了這個命令

/link "/LIBPATH:E:\Personal\SideWorks\vcpkg\installed\x86-windows\lib" gdal.lib geos.lib geos_c.lib

並使用setup.py文件如下

ext_modules = [
    Extension(
        include_dirs=[],
        # extra_link_args=[r'"/LIBPATH:E:\Personal\SideWorks\vcpkg\installed\x86-windows\lib"'],
        libraries =['gdal','geos','geos_c'],
        # library_dirs =['E:\Personal\SideWorks\vcpkg\installed\x86-windows\lib'],
        language='c++'
    ),
]

好吧,我嘗試了這兩種方法,但它們都不起作用並且存在錯誤。 這是編譯器生成的命令

d:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.22.27905\bin\HostX86\x64\link.exe /nologo /INCREMENTAL:NO /LTCG /nodefaultlib:libucrt.lib ucrt.lib /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO "/LIBPATH:C:\Program Files\Python36\libs" "/LIBPATH:C:\Program Files\Python36\PCbuild\amd64" "/LIBPATH:d:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.22.27905\lib\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.7.2\lib\um\x64" "/LIBPATH:D:\Windows Kits\10\lib\10.0.17763.0\ucrt\x64" "/LIBPATH:D:\Windows Kits\10\lib\10.0.17763.0\um\x64" /LIBPATH:E:\Personal\SideWorks\vcpkg\installed\x86-windows\lib gdal.lib geos.lib geos_c.lib /EXPORT:PyInit_pydggrid build\temp.win-amd64-3.6\Release\Personal\Lab\DGGRID\pydggrid-master\src\main.obj build\temp.win-amd64-3.6\Release\Personal\Lab\DGGRID\pydggrid-master\src\lib\dggrid\binpres.obj .
.
.
.
build\temp.win-amd64-3.6\Release\Personal\Lab\DGGRID\pydggrid-master\src\lib\dglib.obj /OUT:build\lib.win-amd64-3.6\pydggrid.cp36-win_amd64.pyd /IMPLIB:build\temp.win-amd64-3.6\Release\Personal\Lab\DGGRID\pydggrid-master\src\pydggrid.cp36-win_amd64.lib
Creating library build\temp.win-amd64-3.6\Release\Personal\Lab\DGGRID\pydggrid-master\src\pydggrid.cp36-win_amd64.lib and object build\temp.win-amd64-3.6\Release\Personal\Lab\DGGRID\pydggrid-master\src\pydggrid.cp36-win_amd64.exp
gridgen.obj : error LNK2001: unresolved external symbol GDALAllRegister
quadclip.obj : error LNK2001: unresolved external symbol CSLPartialFindString
DgOutShapefile.obj : error LNK2001: unresolved external symbol DBFWriteStringAttribute
build\lib.win-amd64-3.6\pydggrid.cp36-win_amd64.pyd : fatal error LNK1120: 215 unresolved externals
error: command 'd:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.22.27905\\bin\\HostX86\\x64\\link.exe' failed with exit status 1120

好吧,它表明鏈接命令已添加到linker.exe ,但我仍然遇到相同的錯誤。 我檢查了該目錄中存在庫 (*.lib) 文件。 出現此錯誤我哪里做錯了? 謝謝

雖然這是一個老問題,但我猜(並希望)某些人可能會從答案中受益。

當我遇到同樣的問題時,我設法為我的.lib文件提供了extra_objects

ext_modules = [
    Extension(
        include_dirs=[],
        extra_objects=[
            r'E:\Personal\SideWorks\vcpkg\installed\x86-windows\lib\gdal.lib',
            r'E:\Personal\SideWorks\vcpkg\installed\x86-windows\lib\geos.lib',
            r'E:\Personal\SideWorks\vcpkg\installed\x86-windows\lib\geos_c.lib'
        ]
        language='c++'
    ),
]

(我不知道路徑是否正確,但你明白了。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM