【问题标题】:Boost.Python and error LNK1104: cannot open file 'boost_python-vc100-mt-gd-1_55.lib'Boost.Python 和错误 LNK1104:无法打开文件 'boost_python-vc100-mt-gd-1_55.lib'
【发布时间】:2024-01-16 12:55:01
【问题描述】:

我正在尝试按照this 将 Python 嵌入到 C++ 应用程序中的教程进行操作,并且从一开始就遇到了障碍。让我带你去看看……

  1. 我将 boost 库解压到 C:\codelibraries\c++\boost_1_55_0
  2. 我在 VC++ 中创建了一个新项目,并使用以下代码在其中创建了一个“test1.cpp”文件:

    #include <boost/python.hpp>
    
    int main(int, char**) {
     Py_Initialize();
    
     Py_Finalize();
     return 0;
    }
    
  3. 然后我将以下目录放在我的 VC++ 目录中 > 包含目录:
    • C:\codelibraries\c++\boost_1_55_0
    • C:\codelibraries\c++\boost_1_55_0\boost\python
    • C:\Python27\include
  4. 在我的 VC++ 目录 > 库目录中:
    • C:\codelibraries\c++\boost_1_55_0
    • C:\codelibraries\c++\boost_1_55_0\libs
    • C:\Python27\libs
  5. 在我的 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 前缀会自动添加到库名称中,因此您不必进行任何重命名。尝试打开 &lt;boost/python.hpp&gt; 并回溯到包含 &lt;boost/config/auto_link.hpp&gt; 的位置,看看您是否能找出自动链接名称错误的原因。
  • 你还需要链接到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


【解决方案1】:

我不想再回答这个问题了。事实证明,问题是试图将 64 位 Python 实现与 32 位版本的 boost 库一起使用。切换到 32 位 Python 后,事情变得容易多了。如果您不必使用 64 位 Python,我建议您不要使用它。

【讨论】:

    【解决方案2】:

    就我而言,stage/lib 中只有以 libboost* 而不是 boost* 开头的 .lib 文件。所以我必须从http://boost.teeks99.com/ 下载包含所有libboost*.lib、boost*.lib 和boost*.dll 版本的二进制文件,并按顺序将boost*.lib 和boost*.dll 添加到stage\lib 库中让它工作。

    【讨论】: