我需要从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