OSX で、いくつかの外部依存関係 ( boost、OpenGL )を持つ共有ライブラリをコンパイルしました。
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_64
、otool -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
ましたが、後者は機能しました。理由を教えてください。これらのフラグを使用してコンパイルされたブーストライブラリである可能性がありますか?
おかげさまでリニューアル!