1

我尝试通过链接我使用选项编译的“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",但仍然收到相同的错误消息。

我想这与在共享库中链接静态库有关,但我尝试了所有建议,但它仍然不起作用。

4

1 回答 1

1

配置 log4cplus 时,使用该--with-pic选项获取带有 PIC 代码的静态库,该库可以链接到 SO。

于 2014-10-01T05:24:49.120 回答