无法在 Mac 上构建谷歌协议缓冲区教程
Posted
技术标签:
【中文标题】无法在 Mac 上构建谷歌协议缓冲区教程【英文标题】:Can't build google protocol buffers tutorial on mac 【发布时间】:2012-04-20 15:37:07 【问题描述】:我正在尝试在 Mac 上构建 c++ 教程示例,但到目前为止没有成功。教程在这里。 . . .
https://developers.google.com/protocol-buffers/docs/cpptutorial
由于没有 pkg-confic 命令,我无法使用 makefile 来构建示例。我收到以下错误。 .
pkg-config --cflags protobuf # fails if protobuf is not installed
/bin/sh: pkg-config: command not found
make: *** [add_person_cpp] Error 127
我可以使用以下代码构建编译器和库
./configure --prefix=/usr
make
make check
make install
我可以使用 protoc 编译教程中包含的 proto 文件,但由于某种原因我无法链接可执行文件。我得到以下内容。 . .
$ g++ add_person.cc addressbook.pb.cc -L /usr/lib/ -l libprotobuf.a -o write
ld: library not found for -llibprotobuf.a
...但是库肯定在 /usr/lib 中。我可能在这里犯了一个非常基本的错误。
【问题讨论】:
【参考方案1】:链接标志应该是
-lprotobuf
【讨论】:
【参考方案2】:@Learvst 和你一样,我的 Mac 上没有安装 pkg-config 我的 MAC 版本见下文
$sw_vers
产品名称:Mac OS X
产品版本
离子:10.9.4
构建版本:13E28
所以我做了以下
A.获取 protobuf 库位置
abd@harvey-specter$ otool -L $(which protoc)
这表示 protoc 编译器使用库“libprotobuf.8.dylib”
B.然后我编译了
abd@harvey-specter$ c++ add_person.cc addressbook.pb.cc -o add_person_cpp -L/usr/local/lib -lprotobuf.8
C.瞧,我已经准备好使用我的程序“add_person_cpp”了
abd@harvey-specter$ c./add_person_cpp
用法:./add_person_cpp ADDRESS_BOOK_FILE
希望对你有帮助
【讨论】:
【参考方案3】:仅供参考,在 Mac OS 上使用 3.5.0。
我为 protobuf 3.5.0 更改了 Makefile 中的行。 cpp编译。
首先,让我说我在这台机器上没有 sudo 权限,无法在“通常”的地方进行安装,所以它在 ~/local/lib,bin,include 中。
add_person_cpp: add_person.cc protoc_middleman
#pkg-config --cflags protobuf # fails if protobuf is not installed
c++ add_person.cc addressbook.pb.cc -o add_person_cpp -lprotobuf -L~/local/lib -I~/local/include #`pkg-config --cflags --libs protobuf`
list_people_cpp: list_people.cc protoc_middleman
#pkg-config --cflags protobuf # fails if protobuf is not installed
c++ list_people.cc addressbook.pb.cc -o list_people_cpp -lprotobuf -L~/local/lib -I~/local/include #`pkg-config --cflags --libs protobuf`
[ 我把 ~ (波浪号) 放在那里,但在我的实际 Makefile 中,我放了完整路径......只是有点混淆了。 ]
Java 编译如宣传的那样工作。
我不能使用 python,因为获取 pip 或运行 easy_install 需要 sudo。
【讨论】:
以上是关于无法在 Mac 上构建谷歌协议缓冲区教程的主要内容,如果未能解决你的问题,请参考以下文章