我需要從C++源生成目標文件,然後將它們與Boost正規表庫鏈接以模仿使用Rcpp編譯包。我在編寫小測試用例和完整軟件包時觀察到了同樣的問題,因此這裏提供了兩個版本的問題,供不熟悉Rcpp的人使用。鏈接提升正則表達式
小測試用例
我使用gcc 4.6.3在Windows上,由Rtools提供。測試的源文件非常基本:我包含regex.hpp,然後使用boost :: regex,boost :: regex_match,boost :: regex_search和boost :: smatch。問題是,如果我使用編譯我的代碼:
g++ -O0 -pipe -g -Wall -I"xxx\boost_1_56_0" "src/01 - regex.cpp" -o Debug/regex.o
g++ -O0 -pipe -g -Wall Debug/regex.o "xxx\libboost_regex-gcc-1_56.a" -o Debug/reg.exe
我得到這樣的錯誤消息,在第一個命令:
undefined reference to `boost::re_detail::cpp_regex_traits_char_layer<char>::init()
但是,如果我使用一個命令來建立的一切:
g++ -O0 -pipe -g -Wall -I"xxx\boost_1_56_0" "src/01 - regex.cpp" "xxx\libboost_regex-gcc-1_56.a" -o Debug/reg.exe
我沒有收到任何錯誤消息。我如何編譯我的對象文件,然後鏈接到Boost Regex?
問題的完整RCPP包
在更大的背景下,當我編譯我的真實RCPP包,我能夠編譯其他幾個目標文件和鏈接之後他們(非升壓)庫。 Boost Regex是這方面第一個有問題的圖書館。
完整的軟件包使用內置:
R CMD INSTALL --no-multiarch --with-keep.source .
有了:
STKPPLIB = ../../stkpp/lib/libSTKpp.a
RELIB = ../../boost_1_56_0/libs/regex/build/gcc/libboost_regex-gcc-1_56.a
MCLIB = ../../MixtComp/lib/libMixtComp.a
和:
PKG_LIBS = `$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"` $(MCLIB) $(STKPPLIB) $(RELIB)
而構建過程給出類似 「未定義的引用」 錯誤。問題與前一個問題相同:如何編譯我的對象文件然後鏈接到Boost Regex?
原來,對於小測試用例,我只是忘記了gcc -c選項來編譯但不鏈接對象文件。 – vkubicki 2014-10-30 13:29:01