c++ - 链接 C++ 代码的问题

标签 c++ compiler-construction linker static-libraries linker-errors

我想学习如何制作和使用静态库,但遇到了一些问题。这就是我所做的。

首先,我编写了一些代码并将其放入 String.hString.cpp 文件中。

然后我将它编译成一个目标文件:

mingw32-g++ -c -O2 -s -DNDEBUG String.cpp -o .\obj\String.o

然后我存档(?)它:

ar cr .\lib\String.lib .\obj\String.o

并索引(?)它:

ranlib.\lib\String.lib

之后,我已经成功编译测试并将其与 mingw 链接:

mingw32-g++ -std=c++03 -Wall -O2 -s -DNDEBUG .\test\src\test.cpp .\lib\String.lib -o .\test\bin\test. exe

测试编译、链接和运行完美。

之后,我想将该库包含到我的 MSVS12 项目中。我有:

  1. String.h 的路径添加到 Project - C/C++ -General - Additional Include Directories

  2. String.h 包含到一些项目头文件中

  3. String.lib 的路径添加到 Project - Linker - General - Additional library directories

  4. String.lib 添加到 Project - Linker - Input - Additional dependencies

在我尝试构建项目时执行所有这些步骤后,链接器给我许多 LNK2011LNK2019 错误。在我看来,它找不到我的功能的实现...

请告诉我我做错了什么,我该如何解决。谢谢!

最佳答案

C++ 没有很多关于二进制格式的标准——甚至没有名称在库中的记录方式。 (C++ 编译器喜欢“破坏”名称,将诸如参数和返回类型代码之类的东西插入其中。但他们并不完全同意如何这样做。)结果是,库来自一个编译器很少可移植到另一个编译器,除非它们中的函数声明为 extern "C"

您必须这样声明您的库函数,或者如果您想在其中使用它,则必须使用 Visual Studio 编译该库。 (如果你愿意,你也可以将库的代码放在头文件中,但听起来你正在尝试拥有一个已经编译的静态库。)

关于c++ - 链接 C++ 代码的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16619335/

相关文章:

c++ - 在 VS2012 中使用时出现 log4cplus 链接错误

C 包含库失败

c++ - 在 Linux 上使用带有 g++ 的 RWTValHashMap 的奇怪问题

c++ - C++中的指针列表

c++ - Std::stringstream move 分配在 gcc 中不起作用

java - 即时编译和堆栈替换之间的区别

c++ - __PRETTY_FUNCTION__、__FUNCTION__、__func__ 有什么区别?

c++ - 确定是否使用 Boost.Asio 计算 UDP 校验和

c - 我在函数 `yylex' : lex. yy.c :(. text+0x2ac) 中遇到错误: undefined reference

c++ - 有没有办法忽略未使用的 undefined reference ?