我知道有很多与 Linux 上的共享库相关的问题,但可能是因为我厌倦了在 Linux 上创建一个简单的动态库(在 Windows 上只需不到 10 分钟)我找不到在这种情况下会发生什么。因此,我正在尝试创建一个在构建时链接并在运行时使用的库(不是静态库,也不是要嵌入到可执行文件中的库,换句话说)。现在它包含一个简单的功能。这些是我的文件:
1.
// gugulibrary.cpp
// This is where my function is doing its job
#include "gugulibrary.h"
namespace GuGu {
void SayHello() {
puts("Hello!");
}
}
2.
// gugulibrary.h
// This is where I declare my shared functions
#include <stdio.h>
namespace Gugu {
void SayHello();
}
3.
// guguapp.cpp
// This is the executable using the library
#include "gugulibrary.h"
int main() {
GuGu::SayHello();
return 0;
}
这就是我尝试构建项目的方式(我认为这是错误的):
gcc -Wall -s -O2 -fPIC -c gugulibrary.cpp -o gugulibrary.o
ld -shared -o bin/libGugu.so gugulibrary.o
gcc -Wall -s -O2 guguapp.cpp -o bin/GuGu -ldl
export LD_LIBRARY_PATH=bin
这被保存为 .sh 文件,我在终端中单击并执行该文件。尝试链接库时出现的错误是:
/tmp/ccG05CQD.o: In function `main':
guguapp.cpp:(.text.startup+0x7): undefined reference to `SayHello'
collect2: ld returned 1 exit status
这就是我迷路的地方。我希望库现在与可执行文件位于同一文件夹中,也许我需要一些符号/定义文件或其他东西,我不知道如何创建。谢谢你的帮助!