g ++链接静态库错误

时间:2015-04-12 10:22:40

标签: c++ gcc

我对C ++比较陌生,而且我大多习惯在Visual Studio 2013环境中工作。我需要在我正在处理的项目中使用这个库: https://github.com/s3rvac/cpp-bencoding

我的第一个问题是:我在Visual Studio或GCC(MinGW-w64)中构建库是否重要?

无论如何,我使用GCC(4.9.2)构建它,因为作者在GitHub的指令中这样做了。我没有错误,我创建了一个名为 libbencoding.a

的库

现在我想将这个lib文件链接到我自己的项目。这是我被卡住了。所以我创建了一个简单的hello world程序(main.cpp)。 libbencoding.a的位置在 C:\ ... \ cpp-bencoding \ build \ src

文件夹中
g++ main.cpp -L "C:\...\cpp-bencoding\build\src" -l libbencoding -o foo.exe -std=c++11

然而,这会产生错误消息:

C:/Program Files (x86)/mingw-w64/i686-4.9.2-posix-dwarf-rt_v4-rev2/mingw32/bin/../lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/bin/ld.exe: cannot
 find -llibbencoding
collect2.exe: error: ld returned 1 exit status

我真的很感激这里的一些帮助。

提前致谢!

1 个答案:

答案 0 :(得分:1)

如果您的项目使用Visual Studio 2013进行编译和链接,那么您的项目可能会在MinGW中出现编译和链接错误,因为它们实现了不同的C ++标准集或者您使用的是非标准语言功能。

正如allan.simon所提到的,你不能在用Visual Studio编译的程序中使用.a库,反之亦然,因为缺乏标准的ABI(只有你使用C编译器才有可能)。

项目cpp-bencoding使用CMake,因此您可以尝试使用Visual Studio进行编译。

还有一件事,当您使用MinGW时,库的顺序很重要。您可以使用Visual Studio使用选项-lmylib1 -lmylib2 -lmylib3编译项目,但MinGW可以为您提供链接错误(未定义的引用)。

您可以找到详细信息here