我尝试通过链接"liblog4cplus.a“来创建一个名为"logtest.so”的共享库,这个共享库是我用-fPIC选项编译的。
这里是"logtest.cpp“(仅用于测试目的,从log4cplus网站复制):
#include "log4cplus/logger.h"
#include "log4cplus/loggingmacros.h"
#include "log4cplus/configurator.h"
using namespace log4cplus;
void test()
{
initialize();
BasicConfigurator config;
config.configure();
}下面是命令:
g++ -shared logtest.cpp -L . -llog4cplus -pthread -o liblogtest.so -lrt -fPIC下面是错误消息:
/usr/bin/ld: ./liblog4cplus.a(configurator.o): relocation R_X86_64_32S against `_ZTVN9log4cplus23ConfigureAndWatchThreadE' can not be used when making a shared object; recompile with -fPIC
./liblog4cplus.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status通过调用:
nm liblog4cplus.a | grep _ZTVN9log4cplus23ConfigureAndWatchThreadE我得到了:
0000000000000000 V _ZTVN9log4cplus23ConfigureAndWatchThreadE我尝试添加"-Wl,-rpath,$ORIGIN",但仍然收到相同的错误消息。
我猜这与在共享库中链接静态库有关,但我尝试了所有的建议,但它仍然不起作用。
发布于 2014-10-01 13:24:49
在配置log4cplus时,使用--with-pic选项获取一个包含PIC代码的静态库,该库可以链接到SO中。
https://stackoverflow.com/questions/26124543
复制相似问题