16

在 Ubuntu 13.04 上构建 thrift 0.9.1(支持 C、C++、java、C#、perl、python)我收到此错误。

./configure 不带任何选项运行,make 不带任何选项运行...

Making all in test
make[2]: Entering directory `/home/dvb/sw/thrift-0.9.1/test'
Making all in nodejs
make[3]: Entering directory `/home/dvb/sw/thrift-0.9.1/test/nodejs'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/home/dvb/sw/thrift-0.9.1/test/nodejs'
Making all in cpp
make[3]: Entering directory `/home/dvb/sw/thrift-0.9.1/test/cpp'
Makefile:832: warning: overriding commands for target `gen-cpp/ThriftTest.cpp'
Makefile:829: warning: ignoring old commands for target `gen-cpp/ThriftTest.cpp'
/bin/bash ../../libtool --tag=CXX   --mode=link g++ -Wall -g -O2 -L/usr/lib   -o libtestgencpp.la  ThriftTest_constants.lo ThriftTest_types.lo ../../lib/cpp/libthrift.la -lssl -lcrypto -lrt -lpthread 
libtool: link: ar cru .libs/libtestgencpp.a .libs/ThriftTest_constants.o .libs/ThriftTest_types.o 
ar: .libs/ThriftTest_constants.o: No such file or directory
make[3]: *** [libtestgencpp.la] Error 1
make[3]: Leaving directory `/home/dvb/sw/thrift-0.9.1/test/cpp'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/dvb/sw/thrift-0.9.1/test'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/dvb/sw/thrift-0.9.1'
make: *** [all] Error 2
dvb@dvb-u13:~/sw/thrift-0.9.1$ 
4

6 回答 6

13

虽然这似乎是 0.9.1 版本 tarball 中的一个缺陷,但截至今天下午,通过 git 拉取的树的顶部并不是问题。

如果遇到此问题,解决方案是使用更新版本的 thrift,直接通过 git 获取源代码树,而不是下载 tarball。构建的唯一区别是您需要在配置之前运行 bootstrap.sh。这是有据可查的。

注意另外两个有用的数据:1. 配置构建 --without-tests(下面是 Mike Johnson - 谢谢) 2. 这个问题在 0.9.2 版本中得到修复(下面是 Luke - 谢谢!)

于 2013-09-05T20:59:58.570 回答
9

我今晚遇到了这个问题并“修复”了它。问题是 ar(1) 在目录 test/cpp/.libs 中找不到 .o 文件。我确信在 test/cpp 中的 Makefile.am 中缺少一些魔法,但我既没有耐心也没有 automake-fu 来解决这个问题。

相反,我只是将 .o 文件从 test/cpp 符号链接到 test/cpp/.libs/。这修复了 C++ 测试的构建。

cd thrift-0.9.1/test/cpp/.libs
for i in ../*.o; do echo $i; ln -s $i .; done
于 2014-01-05T07:04:06.370 回答
6

Thrift 是因为这个编译问题而发布的。您可以选择跳过编译测试,而是:

./configure --without-tests
于 2014-04-08T17:47:25.260 回答
3

你也可以试试这个:

./configure 
(cd test/cpp; ln -s . .libs)
make install

这将简单地将 .libs 链接回 test/cpp。“ar”会在那里找到文件。

于 2014-01-15T17:01:07.960 回答
1

David V 说得对,0.9.1 坏了,但 0.9.2 有效。构建说明似乎也是一个断开的链接。所以这里是对我有用的命令,来自全新的 Ubuntu 安装:

# Install java if you don't have it
sudo apt-get install default-jre
# install build dependencies
sudo apt-get install libboost-dev libboost-test-dev libboost-program-options-dev libboost-system-dev libboost-filesystem-dev libevent-dev automake libtool flex bison pkg-config g++ libssl-dev 
cd /tmp 
curl http://archive.apache.org/dist/thrift/0.9.2/thrift-0.9.2.tar.gz | tar zx 
cd thrift-0.9.2/ 
./configure 
make 
sudo make install 
#test that it can run
thrift --help 

(归功于这些有用的说明;我刚刚用 0.9.2 替换了 0.9.1)

于 2015-08-18T01:34:34.313 回答
-1

我碰巧遇到了这个问题。您可以尝试 cp all test/cpp/*.o 到 .libs 文件夹。

或者您可以跳过编译测试。

cp test/cpp/*.o test/cpp/.libs/
于 2014-09-03T09:24:24.920 回答