【问题标题】:The library file name with "lib" head can't be recognized in codeblocks and vs9 compiler在代码块和 vs9 编译器中无法识别带有“lib”头的库文件名
【发布时间】:2012-12-27 10:24:26
【问题描述】:

这个环境是win7,codeblocks,vs9,boost1.52,

我已经用python库安装了boost库。它会生成一些库文件。例如“libboost_python-vc90-mt-gd-1_52.lib”。

然后我写了一个测试代码进行编译和链接。但是出现错误:无法打开文件“boost_python-vc90-mt-gd-1_52.lib”。

VS 编译器无法识别带有“lib”头的库文件名?如何做得更好。

【问题讨论】:

  • 如果VS不会自动添加lib,你就不能自己添加到项目中的lib名中吗?
  • @JoachimIsaksson,对不起,我不知道该怎么做。我以前只在 linux 工作。
  • this question的可能重复

标签: c++ visual-studio boost codeblocks


【解决方案1】:

在名称的开头添加lib 前缀是Linux 的事情。在 Windows 上,末尾有一个 .lib

如果库被命名为“libboost_python-vc90-mt-gd-1_52”,您必须将这个名称准确地提供给链接器。

【讨论】:

  • 只是,我把这个名字给了链接器。但是犯了同样的错误。 link.exe /dll /nologo /LIBPATH:"D:\Microsoft Visual Studio 9.0\VC\lib" /LIBPATH:"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib" /LIBPATH:C:\Python27\libs /LIBPATH:D:\boost\lib /out:bin\Debug\test1.dll user32.lib D:\boost\lib\libboost_python-vc90-mt-gd-1_52.lib obj\Debug\main.obj /DEBUG /INCREMENTAL:NO
  • @simon 你应该只使用libboost_python-vc90-mt-gd-1_52.lib 而不使用完整路径。
  • 我已将D:\boost\lib 添加到LIBPATH。我的东西编译器可以找到它。如何仅使用libboost_python-vc90-mt-gd-1_52.lib?与LIBPATH 中的D:\boost\lib\libboost_python-vc90-mt-gd-1_52.lib 相同?我也这样做。跨度>
  • @simon 我的意思是,该目录应该在LIBPATH 中,就像它似乎已经存在的那样,并且库名称不应附加任何路径(您正在与D:\boost\lib\libboost_python-vc90-mt-gd-1_52.lib 链接,这应该只能是libboost_python-vc90-mt-gd-1_52.lib。有点像你在linux中用-L设置库路径,只用-l给出库名。如果你用-l使用绝对路径,它将失败并且找不到库。
【解决方案2】:

首先,Boost 在 Windows 下使用自动链接。因此,您只需要提供boost 库的位置,而不是名称本身。

其次,Boost 对静态链接库和动态链接库使用不同的文件名。带有lib 前缀的用于静态链接,不带前缀的用于动态链接。

默认情况下,Boost 在 Windows 上使用静态链接。定义BOOST_ALL_DYN_LINK(如果您只想动态链接某些库,也有特定于库的宏)将启用动态链接。

从您的错误消息来看,您的项目似乎启用了BOOST_ALL_DYN_LINK(在项目设置中,作为#define<boost/config/user.hpp>。如果您更喜欢静态链接,请确保更改/删除此设置.

无论哪种方式,请确保相应的二进制文件可用并且链接器知道它们的位置(只是目录)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多