0

Unix、GCC で Boost ライブラリを使用しています。次のトピックを読みました: Boost static linking and added -static to my 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 では、静的フラグを削除し、静的にリンクするためにライブラリへの完全なパスを指定する必要があります。これが他の「UNIX」でどのように機能するかはわかりません

例えば。

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