如何使用Cygwin构建Google RE2?

时间:2011-11-27 10:39:30

标签: c++ windows cygwin

我收到了这些错误:

  

g ++:无法识别的选项'-pthread'
  util / test.cc:1:0:警告:-fPIC被目标忽略(所有代码都与位置无关)

(多个),最后:

  

/usr/lib/gcc/i686-pc-cygwin/4.5.3 /../../../../ i686-pc-cygwin / bin / ld:找不到-lre2   collect2:ld返回1退出状态

有什么建议吗?

UPD完整编译器日志

g++ -o obj/so/test/charclass_test obj/so/re2/testing/charclass_test.o obj/so/util/pcre.o obj/so/util/random.o obj/so/util/thread.o obj/so/re2/testing/backtrack.o obj/so/re2/testing/dump.o obj/so/re2/testing/exhaustive_tester.o obj/so/re2/testing/null_walker.o obj/so/re2/testing/regexp_generator.o obj/so/re2/testing/string_generator.o obj/so/re2/testing/tester.o obj/so/util/test.o -Lobj/so -lre2 obj/libre2.a -pthread
g++: unrecognized option '-pthread'
/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/ld: cannot find -lre2
collect2: ld returned 1 exit status
make: *** [obj/so/test/charclass_test] Error 1

2 个答案:

答案 0 :(得分:3)

我已经完成了以下事情来编译re2库和cygwin上的测试

1)库的编译和安装

hg clone https://re2.googlecode.com/hg re2
cd re2
make
make install

2)测试汇编。    修改Makefile并替换此行:

$(CXX) -o $@ obj/so/re2/testing/$*.o $(STESTOFILES) obj/so/util/test.o -Lobj/so -lre2 obj/libre2.a $(LDFLAGS) $(LDPCRE)

这一行

$(CXX) -o $@ obj/so/re2/testing/$*.o $(STESTOFILES) obj/so/util/test.o -L/usr/local/lib -lre2 obj/libre2.a $(LDFLAGS) $(LDPCRE)

然后呢

make test

为我编译的库没有问题,并且所有测试都通过了例外。

如果您只需要Windows版本的库,也可以为Visual Studio检查此版本的re2。 http://code.google.com/p/re2win/

答案 1 :(得分:0)

您可以更改Makefile以传递编译。但是,测试仍然会失败。我建议你联系hg项目所有者,看看为什么这对cygwin不起作用。

$ hg diff
diff -r 9aa1d4f2954d Makefile
--- a/Makefile  Sun Oct 30 15:57:08 2011 +0000
+++ b/Makefile  Mon Dec 05 11:03:39 2011 -0800
@@ -191,7 +191,7 @@

 obj/so/test/%: obj/so/libre2.so obj/libre2.a obj/so/re2/testing/%.o $(STESTOFILES) obj/so/util/test.o
        @mkdir -p obj/so/test
-       $(CXX) -o $@ obj/so/re2/testing/$*.o $(STESTOFILES) obj/so/util/test.o -Lobj/so -lre2 obj/libre2.a $(LDFLAGS) $(LDPCRE)
+       $(CXX) -o $@ obj/so/re2/testing/$*.o $(STESTOFILES) obj/so/util/test.o -Lobj/so obj/libre2.a $(LDFLAGS) $(LDPCRE)

 obj/test/regexp_benchmark: obj/libre2.a obj/re2/testing/regexp_benchmark.o $(TESTOFILES) obj/util/benchmark.o
        @mkdir -p obj/test