I have an object file and I want to create a shared library, libA.so
, out of it and link it to another shared library, libB.so
. The source file contains a single class and does not have any dependencies on libB.so
.
I would create libA.so
using either clang++
or 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
Using objdump
or readelf
I can see that my library is listed in the first case (clang
), but not in the second case (g++
). Any ideas why?
Example
C++
file:
#include <iostream>
class Tain {
public:
void test() {
std::cout << "YES";
}
};
int main( int argc, const char* argv[] )
{
Tain t;
t.test();
}
Result of 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) Shared library: [libstdc++.so.6]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
clang++-3.5 -shared -L/PATH/TO/BOOST -lboost_log -Wl,-soname=main.so -o main.so main.cpp
:0x0000000000000001 (NEEDED) Shared library: [libboost_log.so.1.56.0]
0x0000000000000001 (NEEDED) Shared library: [libstdc++.so.6]
0x0000000000000001 (NEEDED) Shared library: [libm.so.6]
0x0000000000000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]