相关疑难解决方法(0)

gcc中共享库函数的静态链接

如何在gcc中静态链接共享库函数?

linux gcc

127
推荐指数
5
解决办法
15万
查看次数

有没有办法"静态地"将共享的.so(或.o)库插入到可执行文件中?

首先,请考虑以下情况.

以下是一个程序:

// test.cpp
extern "C" void printf(const char*, ...);

int main() {
        printf("Hello");
}
Run Code Online (Sandbox Code Playgroud)

下面是一个图书馆:

// ext.cpp (the external library)
#include <iostream>

extern "C" void printf(const char* p, ...);

void printf(const char* p, ...) {
        std::cout << p << " World!\n";
}
Run Code Online (Sandbox Code Playgroud)

现在我可以用两种不同的方式编译上面的程序和库.

第一种方法是在不链接外部库的情况下编译程序:

$ g++ test.cpp -o test
$ ldd test
        linux-gate.so.1 =>  (0xb76e8000)
        libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7518000)
        /lib/ld-linux.so.2 (0xb76e9000)
Run Code Online (Sandbox Code Playgroud)

如果我运行上面的程序,它将打印:

$ ./test 
Hello
Run Code Online (Sandbox Code Playgroud)

第二种方法是使用指向外部库的链接编译程序:

$ g++ -shared -fPIC ext.cpp -o libext.so
$ g++ test.cpp -L./ -lext  -o …
Run Code Online (Sandbox Code Playgroud)

c c++ gcc shared-libraries

14
推荐指数
1
解决办法
2258
查看次数

我是否需要静态库来静态链接?

在'C',Linux,

我是否需要静态链接静态链接,或者我需要的共享库?如果没有,为什么不呢?(它们不包含相同的数据吗?)

c linux static-libraries static-linking

9
推荐指数
2
解决办法
3135
查看次数