0

我在 Unix,GCC 中使用 Boost 库。我阅读了以下主题:提升静态链接并将 -static 添加到我的 Makefile 中。但是,这不起作用。

这是我的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
4

1 回答 1

0

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

例如。

g++ ..... /path/to/your/lib.a ... -o ..
于 2013-06-10T22:24:37.863 回答