Google RE2库无法在ubuntu中使用'make testinstall'进行编译

时间:2014-02-22 02:33:21

标签: c++ compilation re2

大师!

我正在使用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吗?谢谢!

5 个答案:

答案 0 :(得分:1)

请参阅this comment

  

向LDFLAGS添加-pthread似乎修复了make test(所有测试都是   通过),但不是make testinstall

这会让你接下来的错误

答案 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文件中。