Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MacOS下链接找不到protobuf #344

Closed
d976045024 opened this issue Oct 16, 2023 · 9 comments
Closed

MacOS下链接找不到protobuf #344

d976045024 opened this issue Oct 16, 2023 · 9 comments

Comments

@d976045024
Copy link

截屏2023-10-17 00 01 51 如图,试着按照教程安装了protobuf,仍然没有用,请问应该怎么解决
@holmes1412
Copy link
Contributor

你好,可以把安装protobuf的步骤和路径发一下吗?

@d976045024
Copy link
Author

protobuf通过源码安装没有成功,于是采用brew安装,安装后各路径如下(brew list protobuf):
image
之后我修改了src目录下CMakeLists.txt,修改如下:
image
image

修改后没有报之前的错误,但是还是报了链接错误,具体如下:
image
image

怀疑是不是protobuf版本或者库的添加路径不对。
大二小白非常感谢大佬能帮忙看一下

btw,按照文档在linux下可以正常编译运行, 看了下linux下protobuf位置在/usr/local/bin下,怀疑是不是没有设置软链。

@holmes1412
Copy link
Contributor

holmes1412 commented Oct 17, 2023

  1. 可以尝试执行 brew link protobuf,在系统的/usr/local/include 和 /usr/local/lib目录上建立链接。

  2. 手动设置,可以尝试一下把set(Protobuf_LIB_DIR /opt/homebrew/Cellar/protobuf/24.4/lib) 改为set(Protobuf_LIBRARIES/opt/homebrew/Cellar/protobuf/24.4/lib/libprotobuf.24.4.0.dylib) 再试一下吗?后者是官方文档里用的,前者是通过命令从后者切出来的。

  3. 链接错误的问题,可以先尝试强制指定lib,比如下面,src/CMakeLists.txt:

    if (APPLE)                                                                     
        target_link_libraries(${SHARED_LIB_NAME}                                   
                              OpenSSL::SSL                                         
                              OpenSSL::Crypto                                      
                              pthread                                              
                              protobuf ### 改成:/opt/homebrew/Cellar/protobuf/24.4/lib/libprotobuf.24.4.0.dylib                  
                              workflow                                             
                              z ${SNAPPY_LIB} ${LZ4_LIB})
    else ()                                                                        
        target_link_libraries(${SHARED_LIB_NAME})                                  
    endif ()

这样应该就不会链接到不一样的lib了。具体通用一点的改法我再定位一下,感谢~~

@d976045024
Copy link
Author

你好,我根据你提到的继续改动了一下,现在执行make,链接似乎仍然会报错,执行进度略有不同,但报错信息相同,具体如下:
image
image

我对整个项目目录做的所有改动如下:

  1. 在根目录下的CMakeLists.txt做了以下改动:
image
  1. 在src目录下的CMakeLists.txt做了以下改动:
image 这里修改了protobuf需求版本,应该没有影响吧~不过也贴出来 image image

系统配置如下:APPLE M2 芯片
openssl也是通过homebrew安装,安装信息如下:
image
这里我没有按照官方文档中的要求添加到环境变量,请问下是否需要软链接到/usr/local/lib下,但是目前好像没有报openssl相关的错误

@holmes1412
Copy link
Contributor

holmes1412 commented Oct 17, 2023

你的截图:set(Protobuf_LIBRARIES xxx),这里应该需要指定的是lib的名字而不是路径,比如/opt/homebrew/Cellar/protobuf/24.4/lib/libprotobuf.24.4.0.dylib

刚才显示指定了cmake里这个lib的名字为${Protobuf_LIBRARIES},PR是#345 ,你可以从我的fork上拉一份试试。P.S. 我看你的pb比较新,可以保留你的C++版本改到17那行,其他应该不需要改了。这样试试?

@d976045024
Copy link
Author

我重新拉了一份代码切换到你提供的分支,并重新修改了Protobuf_LIBRARIES,其他都没有修改,和你的PR上一样,但还是报一样的错误😭
考虑会不会是版本问题,下载protobuf3.20,但编译报错protoc版本太低

@holmes1412
Copy link
Contributor

holmes1412 commented Oct 17, 2023

可以检查一下是否有可能先前安装的版本还在?你可以把变量打出来检查一下是否符合预期:

message(STATUS "Protobuf_VERSION : ${Protobuf_VERSION}")
message(STATUS "Protobuf_INCLUDE_DIRS : ${Protobuf_INCLUDE_DIRS}")
message(STATUS "Protobuf_LIBRARIES : ${Protobuf_LIBRARIES}")
message(STATUS "PROTOBUF_PROTOC_EXECUTABLE : ${PROTOBUF_PROTOC_EXECUTABLE}")

还有一个办法是在~/.zshrc文件加几行,优先指定执行时找的路径:比如把下面的/usr/local/opt/protobuf@3换成你的路径

export PATH="/usr/local/opt/protobuf@3/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/protobuf@3/lib"
export CPPFLAGS="-I/usr/local/opt/protobuf@3/include"
export PKG_CONFIG_PATH="/usr/local/opt/protobuf@3/lib/pkgconfig"

@d976045024
Copy link
Author

终于成功啦!果然是忘记把之前的protobuf路径从zshrc里删除。谢谢!
另外,有个小建议,较新的代码好像需要c++14以上才能运行,CMakeLists.txt里指定的还是std=c++11,是不是该改一下

@Barenboim
Copy link
Contributor

终于成功啦!果然是忘记把之前的protobuf路径从zshrc里删除。谢谢! 另外,有个小建议,较新的代码好像需要c++14以上才能运行,CMakeLists.txt里指定的还是std=c++11,是不是该改一下

你可以自己改一下。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants