我有一个目标文件,我想从中创建一个共享库libB.so
,并将其链接到另一个共享库libB.so
。源文件包含单个类,并且对libA.so
没有任何依赖性。
我会使用clang++
或g++
创建clang++ -shared -L/PATH/TO/LIBB -Wl,-soname=libA.so -o main.so main.o -lB
:
g++ -shared -L/PATH/TO/LIBB -Wl,-soname=libA.so -o main.so main.o -lB
objdump
使用readelf
或clang
我可以看到我的库列在第一种情况(g++
),但不在第二种情况下({ {1}})。有什么想法吗?
示例
C++
档案:
#include <iostream>
class Tain {
public:
void test() {
std::cout << "YES";
}
};
int main( int argc, const char* argv[] )
{
Tain t;
t.test();
}
readelf -a main.so | grep -i needed
的结果:
g++ -shared -L/PATH/TO/BOOST -lboost_log -Wl,-soname=main.so -o main.so main.cpp
:
0x0000000000000001(NEEDED)共享库:[libstdc ++。so.6]
0x0000000000000001(NEEDED)共享库:[libc.so.6]
clang++-3.5 -shared -L/PATH/TO/BOOST -lboost_log -Wl,-soname=main.so -o main.so main.cpp
:
0x0000000000000001(NEEDED)共享库:[libboost_log.so.1.56.0]
0x0000000000000001(NEEDED)共享库:[libstdc ++。so.6]
0x0000000000000001(NEEDED)共享库:[libm.so.6]
0x0000000000000001(NEEDED)共享库:[libgcc_s.so.1]
0x0000000000000001(NEEDED)共享库:[libc.so.6]