链接 C++ 代码时出现问题

问题描述 投票:0回答:1

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

首先,我编写了一些代码并放入

String.h
String.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

完成所有这些步骤后,当我尝试构建项目时,链接器给了我许多

LNK2011
LNK2019
错误。在我看来,它找不到我的功能的实现...

请告诉我我做错了什么以及如何解决它。谢谢!

c++ linker static-libraries linker-errors
1个回答
1
投票

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


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

© www.soinside.com 2019 - 2024. All rights reserved.