fedora15でmingwによるクロスコンパイルを試しております。
boostを使ったプログラムではundefine referenceと言うエラー
が出てしまいます。(linuxのネイティブな環境では問題がないものです。)
プログラムの例としては(unit_test.cpp)
#define BOOST_AUTO_TEST_MAIN
#include <boost/test/auto_unit_test.hpp>
#include <boost/test/floating_point_comparison.hpp>
#include <boost/format.hpp>
using namespace boost;
BOOST_AUTO_TEST_CASE( test )
{
BOOST_CHECK_EQUAL( 1.0, 1.0);
}
と言うよなもので、コンパイルのコマンドは
i686-pc-mingw32-g++ -DBOOST_TEST_DYN_LINK -lboost_unit_test_framework-gcc45-1_46 unit_test.cpp
としております。
エラーは
/tmp/ccnHIW9c.o:unit_test.cpp:(.text+0x42): undefined reference to `__imp___ZN5boost9unit_test14unit_test_mainEPFbvEiPPc'
/tmp/ccnHIW9c.o:unit_test.cpp:(.text+0xf7): undefined reference to `__imp___ZN5boost9unit_test15unit_test_log_t14set_checkpointENS0_13basic_cstringIKcEEjS4_'
/tmp/ccnHIW9c.o:unit_test.cpp:(.text+0x30f): undefined reference to `__imp___ZN5boost9unit_test9ut_detail24auto_test_unit_registrarC1EPNS0_9test_caseEm'
/tmp/ccnHIW9c.o:unit_test.cpp:(.text$_ZN5boost9unit_test13test_observerD2Ev[boost::unit_test::test_observer::~test_observer()]+0x7): undefined reference to `__imp___ZTVN5boost9unit_test13test_observerE'
と言うようなものです。
boostのバグもしくはシステムの不具合ではないかと推測しておりますが、解決できないと非常に不便な問題です。
もし、成功され方がおられましたら、アドバイスをいただけると助かります。
fedoraでのboostのクロスコンパイルについて
-
hjkl
Re: fedoraでのboostのクロスコンパイルについて
boost.testを自分の環境だとビルドしてないんで、
ダイナミックリンクする場合の解決方法はわかりませんが
<boost/test/included/unit_test.hpp>をインクルードすると
ヘッダオンリーで使えるみたいなんでそちらを試してみては。
letsboost::test
chibagoさんのプログラム例のインクルードをヘッダオンリー版に
変えたらコンパイルできましたよ(windowsのmingwですが)。
boost.testに詳しくないんで実行後の出力が正しいものかはわかりませんが。
g++ unit_test.hpp
./a.exe
Running 1 Test cases...
*** No errors detected
ダイナミックリンクする場合の解決方法はわかりませんが
<boost/test/included/unit_test.hpp>をインクルードすると
ヘッダオンリーで使えるみたいなんでそちらを試してみては。
letsboost::test
chibagoさんのプログラム例のインクルードをヘッダオンリー版に
変えたらコンパイルできましたよ(windowsのmingwですが)。
boost.testに詳しくないんで実行後の出力が正しいものかはわかりませんが。
#define BOOST_AUTO_TEST_MAIN
#include <boost/test/included/unit_test.hpp>
using namespace boost;
BOOST_AUTO_TEST_CASE(test)
{
BOOST_CHECK_EQUAL(1.0, 1.0);
}./a.exe
Running 1 Test cases...
*** No errors detected