链接c++代码的问题

Problems with linking C++ code

本文关键字:问题 代码 c++ 链接      更新时间:2023-10-16

我正在学习如何创建和使用静态库,并且我遇到了一些问题。这就是我所做的。

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

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

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

那么我已经存档了(?):

ar cr .libString.lib .objString.o

和索引(?)它:

ranlib .libString.lib

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

mingw32-g++ -std=c++03 -Wall -O2 -s -DNDEBUG .testsrctest.cpp .libString.lib -o .testbintest.exe

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

之后,我想把这个库包含到我的MSVS12项目中。我:

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

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

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

  4. 添加String.libProject - Linker - Input - Additional dependencies

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

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

c++没有太多关于二进制格式的标准——甚至没有名字如何记录在库中。(c++编译器喜欢"混淆"名称,将参数和返回类型代码之类的东西插入其中。但他们在如何做到这一点上没有达成一致。)结果是,除非将其中的函数声明为extern "C",否则来自一个编译器的库很少可移植到另一个编译器。

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