python - 使用 setup.py 链接 library.lib

标签 python c++ windows visual-studio gdal

我想使用 setup.py 编译一个库以在我的 python 包中使用。我正在编译的库是在 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++'
    ),
]

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

关于python - 使用 setup.py 链接 library.lib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58365268/

相关文章:

windows - 使用 Cabal、haskell origin 安装 unix-2.7.0.1 包

windows - 更准确的 Windows 命令提示符 DIR 修改时间

python - python griddata 的替代品

python - 在centOS 6中使用python 2.7安装pip

windows - go中如何连接Oracle

c++ - 两个值的最大值,其中一个不能等于预定义值

c++ - MFC等价于Java File#isDirectory()

初级开发面试中的Python代码测试

Python:OpenCV 无法在 Windows xp 上加载

c++ - 在 C++ 中重新分配指针引用