在unix中增强静态链接

时间:2012-06-27 18:13:58

标签: boost static-linking

我在Unix中使用Boost库,GCC。我阅读了以下主题:Boost static linking并在我的Makefile中添加了-static。但是,这不起作用。

这是我的Makefile:

all: nbbo

nbbo: nbbo.o reader.o
    g++ -static -O3 -ffast-math -funroll-loops -ansi -pedantic-errors -L/usr/lib -lboost_filesystem -lboost_serialization -lboost_iostreams -lz -I /usr/include/boost -o nbbo nbbo.o reader.o

nbbo.o: nbbo.cpp
    g++ -static -O3 -ffast-math -funroll-loops -ansi -pedantic-errors -I /usr/include/boost -c -o nbbo.o nbbo.cpp

reader.o: reader.cc reader.h
    g++ -static -O3 -ffast-math -funroll-loops -ansi -pedantic-errors -I /usr/include/boost -c -o reader.o reader.cc

clean:
    rm *.o

以下是错误消息:

nbbo.o: In function `__tcf_10':
nbbo.cpp:(.text+0x3d9): undefined reference to `boost::serialization::extended_type_info::key_unregister() const'
nbbo.cpp:(.text+0x3e3): undefined reference to `boost::serialization::typeid_system::extended_type_info_typeid_0::type_unregister()'
nbbo.cpp:(.text+0x3fb): undefined reference to `boost::serialization::typeid_system::extended_type_info_typeid_0::~extended_type_info_typeid_0()'
etc

1 个答案:

答案 0 :(得分:0)

您使用的是哪个“UNIX”?使用-static标志应该可以在linux上正常工作。但不是在OSX上。在OSX上,您必须删除静态标志并提供库的完整路径以便静态链接。我不知道这对其他“UNIXes”有什么用呢

例如

g++ ..... /path/to/your/lib.a ... -o ..