【发布时间】:2024-01-16 12:55:01
【问题描述】:
我正在尝试按照this 将 Python 嵌入到 C++ 应用程序中的教程进行操作,并且从一开始就遇到了障碍。让我带你去看看……
- 我将 boost 库解压到 C:\codelibraries\c++\boost_1_55_0
-
我在 VC++ 中创建了一个新项目,并使用以下代码在其中创建了一个“test1.cpp”文件:
#include <boost/python.hpp> int main(int, char**) { Py_Initialize(); Py_Finalize(); return 0; } - 然后我将以下目录放在我的 VC++ 目录中 > 包含目录:
- C:\codelibraries\c++\boost_1_55_0
- C:\codelibraries\c++\boost_1_55_0\boost\python
- C:\Python27\include
- 在我的 VC++ 目录 > 库目录中:
- C:\codelibraries\c++\boost_1_55_0
- C:\codelibraries\c++\boost_1_55_0\libs
- C:\Python27\libs
- 在我的 VC++ 目录中 > 源目录:
- C:\Python27\include
- C:\codelibraries\c++\boost_1_55_0
添加这些并运行后,我收到错误 LNK1104: cannot open file 'boost_python-vc100-mt-gd-1_55.lib'。
好的,事实证明我实际上需要install boost 库。美好的。我这样做。它会创建新文件夹“..\boost_1_55_0\stage\lib。”在其中,有一个名为 libboost_python-vc100-mt-gd-1_55.lib 的库文件和另一个非常相似但不包括“gd”部分的库文件。
在“链接器”>“常规”>“附加库目录”下,我添加了 C:\codelibraries\c++\boost_1_55_0\stage\lib。我再次运行它。它仍然给出相同的链接器错误 LNK1104:无法打开文件 'boost_python-vc100-mt-gd-1_55.lib'。我转到“stage\lib”文件夹,发现没有 boost_python-vc100-mt-gd-1_55.lib,只有 *lib*boost_python-vc100-mt-gd-1_55.lib .
我将 libboost_python-vc100-mt-gd-1_55.lib 重命名为 boost_python-vc100-mt-gd-1_55.lib 并重新运行构建。
它成功了,但给了我其他链接器错误:
error LNK1120: 3 unresolved externals
error LNK2001: unresolved external symbol __imp___Py_NoneStruct
error LNK2019: unresolved external symbol __imp__Py_Finalize referenced in function _main
error LNK2019: unresolved external symbol __imp__Py_Initialize referenced in function _main
现在我被困住了,来到了这里。我写的那几行代码不正确吗?这和我使用 64 位机器有什么关系吗?我的包含不正确吗?如果可以的话请帮忙。非常感谢您提供任何信息,谢谢。
【问题讨论】:
-
您需要安装 Python 并将其头文件和库位置添加到 VC 搜索路径。但是您的设置发生了一些奇怪的事情。 lib 前缀会自动添加到库名称中,因此您不必进行任何重命名。尝试打开
<boost/python.hpp>并回溯到包含<boost/config/auto_link.hpp>的位置,看看您是否能找出自动链接名称错误的原因。 -
你还需要链接到python VM的导入库。
-
@Praetorian 我实际上在“包含目录”中也有“C:\Python\include”标题文件夹。我不确定如何追溯并找出整个自动链接问题,但我会说我还尝试在“..\libs\python\build\..”深处的 Python 示例文件夹上运行 bjam.exe并且 Boost.Build 也在寻找没有“lib”前缀的 python 库。我的“stage\lib”文件夹中的所有内容都已附加“lib”前缀...
标签: python c++ visual-c++ boost linker