【问题标题】:Linking a .lib file on Windows 7在 Windows 7 上链接 .lib 文件
【发布时间】:2016-07-26 08:07:36
【问题描述】:

我有一个 C++ 程序 test.cpp,我想将两个 .lib 文件链接到它(fhlib.lib 和 gc_lib.lib)。我的 .lib 文件与我的 .cpp 程序位于同一文件夹中。我在 Windows 7 上。

到目前为止我尝试过的如下:

g++ -o main main.cpp -L/Users\Documents\Visual Studio 2015\Projects\My Project -lfhlib

但我得到了一个

No such file or directory error.

我确定路径是正确的,因为我是从“属性”->“位置”复制的。但我确实删除了“C:\”,因为它没有编译。

编辑:我找到了这个http://www.mingw.org/wiki/Specify_the_libraries_for_the_linker_to_use

所以我尝试使用

"-I" instead of "-l"

但还是不行。我明白了:

undefined reference to 'fh_set'...

【问题讨论】:

  • -I 选项用于包含路径

标签: c++ windows path g++


【解决方案1】:

如果您在 Windows 上使用 g++ 进行编译,我猜您使用的是 MinGW:MinGW 依赖于 .a 库。使用“-l”选项时,编译器正在寻找扩展名为 .a 的库文件。

.lib 格式的库是用 Visual Studio 编译的:你不能像这样使用它。如果您有源代码,请使用 MinGW 编译您的库或考虑将您的项目迁移到 Visual Studio。

【讨论】:

  • 我已经在 VS 中有我的项目并且可以在那里执行。但现在我想使用 os.systems("g++ -o ...") 从 Python 接口执行。我无法使用 g++ 或 gcc 链接它们吗?你所说的来源,.dll 文件是什么意思?
  • 如果您的库使用纯 C,则可以通过将路径传递给 .lib:g++ -o main main.cpp "C:/Users/Documents/Visual Studio 2015/Projects/My Project/fhlib.lib"(注意我使用引号是因为路径中的空格和 '/' 而不是 '\ ' 以避免对特殊字符的误解)。如果你的库使用 C++,编译器之间没有二进制兼容性,所以它不应该工作
  • 不,它不起作用。我得到对'fh_set'的未定义引用 ...我可以将它们链接到蛋糕文件中,然后执行 os.system("make")?
  • 显然 MinGW 现在也支持 .lib 文件。 mingw.org/wiki/specify_the_libraries_for_the_linker_to_use
  • MinGW 多年来一直支持它们。正如我所说,如果 g++ 发现您的 .lib 二进制文件兼容,它可以使用它。但它可能不会。试试看:如果它有效,你很好。否则 AFAIK 除了用同一个编译器编译所有源代码之外别无他法
【解决方案2】:

所以问题是在 VS 中编译的 lib 文件。而且我不得不使用 VS 编译器而不是 g++ 并且一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2013-07-31
    • 2011-11-06
    • 2011-09-19
    • 2021-03-04
    • 1970-01-01
    相关资源
    最近更新 更多