大师!
我正在使用Ubuntu 13.10 64位来编译最新的Google RE2库,但是'make testinstall'无法编译,这里是日志:
kevin @ ubuntu:〜/ re2 $ make testinstall
cp testinstall.cc obj
(cd obj&& g ++ -I / usr / local / include -L / usr / local / lib testinstall.cc -lre2 -pthread -o testinstall)
/tmp/ccSsaSXS.o:在函数main':
testinstall.cc:(.text+0xce): undefined reference to
re2 :: FilteredRE2 :: FirstMatch(re2 :: StringPiece const&,std :: vector> const&)const'
/usr/local/lib/libre2.so:对pthread_rwlock_rdlock'
/usr/local/lib/libre2.so: undefined reference to
pthread_rwlock_wrlock'的未定义引用
/usr/local/lib/libre2.so:对pthread_rwlock_destroy'
/usr/local/lib/libre2.so: undefined reference to
pthread_rwlock_init'的未定义引用
/usr/local/lib/libre2.so:对'pthread_rwlock_unlock'的未定义引用
collect2:错误:ld返回1退出状态
make: * [testinstall]错误1
我试图用-lpthread替换-pthread,仍然失败,然后我转储libre2.so并发现pthread_xxx在其中。 以下是RE2论坛中的问题跟踪:https://code.google.com/p/re2/issues/detail?id=100
这里的任何人都曾成功地遵守RE2吗?谢谢!
答案 0 :(得分:1)
答案 1 :(得分:0)
根据您构建的内容,制作testinstall'可能没有必要。 我只需要让python re2端口工作,这可以在运行make install后安装。
答案 2 :(得分:0)
之前我遇到过这个问题。修改makefile并使用-lpthread而不是-pthread。
答案 3 :(得分:0)
所以我尝试在testinstall.cc中查找导致符号错误的行,我发现唯一的行是在第18行:
18 - f.firstMatch(:abbccc:,ids);
我评论了这一行(以便仍然调用下面的FullMatch函数)并且只运行g ++ testinstall.cc -lre2 -pthread -o testinstall(基本上是Makefile的功能)并且我能够成功获得二进制文件。虽然这可能无法解决问题,但我们仍然可以使用RE2 :: Fullmatch和部分匹配函数
如果我猜测,也许filter_re2模块中有某个依赖项?
答案 4 :(得分:0)
我遇到了同样的问题。但如果你使用-static
进行编译,一切顺利。
nm -C
显示"缺失"符号存在于.a
和.so
文件中。