2

OSX で、いくつかの外部依存関係 ( boostOpenGL )を持つ共有ライブラリをコンパイルしました。

g++ -dynamiclib -undefined suppress -flat_namespace -o "libMY_LIB.dylib" ./windowbase.o -lGL -lGLU -lGLUT -lboost_system -lboost_thread

エラーなし、file libMY_LIB.dylib結果はMach-O 64-bit dynamically linked shared library x86_64otool -L libMY_LIB.dylib出力:

libPixelsGL.dylib (compatibility version 0.0.0, current version 0.0.0)
/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/GLUT.framework/Versions/A/GLUT (compatibility version 1.0.0, current version 1.0.0)
libboost_system.dylib (compatibility version 0.0.0, current version 0.0.0)
libboost_thread.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)

libMY_LIB.dylibここで、の関数のみを使用してMY_LIB.h(およびlibでコンパイルされた)、に対して実行可能ファイルをリンクしようとします:

g++ -L"/path/to/MY_LIB" -o "Program" ./main.o -lMY_LIB

しかし、それは失敗し、印刷します:

Undefined symbols for architecture x86_64:
"boost::system::system_category()", referenced from:
    __static_initialization_and_destruction_0(int, int)in main.o
    boost::mutex::mutex()in main.o
    boost::mutex::lock()    in main.o
    boost::mutex::unlock()    in main.o
"boost::system::generic_category()", referenced from:
    __static_initialization_and_destruction_0(int, int)in main.o
"boost::thread::detach()", referenced from:
    boost::thread::~thread()in main.o
ld: symbol(s) not found for architecture x86_64

説明やヘルプはありますか?

ありがとう!

編集

フラグなしでライブラリと実行可能ファイルをリンクしようとし-undefined suppress -flat_namespaceましたが、後者は機能しました。理由を教えてください。これらのフラグを使用してコンパイルされたブーストライブラリである可能性がありますか?

おかげさまでリニューアル!

4

1 に答える 1