2015-04-12 155 views
1

我是比较新的C++,我主要用于在Visual Studio 2013环境下工作。我需要在一个项目中使用这个库,我的工作: https://github.com/s3rvac/cpp-bencoding克++链接的静态库错误

我的第一个问题是:它的问题,如果我建立在Visual Studio或GCC(MinGW的-W64)的图书馆吗?

无论如何,我建立了它使用GCC(4.9.2),因为笔者在他的GitHub上的指示这样做的。我没有错误,我制作了一个名为的库libbencoding.a

现在我想将这个lib文件链接到我自己的项目。这是我被卡住了。所以我创建了一个简单的hello世界程序(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 

我真的在这里感谢一些帮助。

在此先感谢!

+5

'-lencoding',不'lib' – Mat

+4

'其实-lbencoding'。 – immibis

+3

如果我错了,那么人们会纠正我,但是对于你的问题,如果它对图书馆编译的编译器有影响,是的。因为C++没有一个稳定和标准的ABI,例如如果你的库的源代码用方法栏定义了类Foo,g ++可能会把名称class__foo__method__bar放在库二进制文件中,而当进行链接时,可能编译器会查找method__bar__of__class__foo –

回答

1

如果你的项目编译和使用Visual Studio 2013链接,你项目可以有编译和链接错误MinGW的,因为他们执行一套不同的C++标准,或者您使用非标准的语言功能。

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

项目CPP-bencoding使用CMake的,所以你可以尝试使用Visual Studio编译它。

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

你可以找到详细here

+0

感谢您的答案。是的,的确,我用Cmake生成了一个VS2013项目,并且我没有任何错误地编译它。但是,我无法将生成的bencoding.lib文件链接到我的其他Visual Studio项目。 – DoubleTrouble

+1

@DoubleTrouble,尝试在使用本码编码的源代码中使用#pragma注释(lib,“C:\ Path \ to \ lib \ bencoding.lib”)。指定.lib文件的完整路径(仅用于测试)。 – gomons

+0

在我切换到GCC之前,我确实尝试过,但没有成功。我不是很有信心,它应该工作,但现在我可以给它一个尝试 – DoubleTrouble