GithubHelp home page GithubHelp logo

Comments (9)

d976045024 avatar d976045024 commented on June 5, 2024 1

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

from srpc.

holmes1412 avatar holmes1412 commented on June 5, 2024

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

from srpc.

d976045024 avatar d976045024 commented on June 5, 2024

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

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

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

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

from srpc.

holmes1412 avatar holmes1412 commented on June 5, 2024
  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了。具体通用一点的改法我再定位一下,感谢~~

from srpc.

d976045024 avatar d976045024 commented on June 5, 2024

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

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

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

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

from srpc.

holmes1412 avatar holmes1412 commented on June 5, 2024

你的截图: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那行,其他应该不需要改了。这样试试?

from srpc.

d976045024 avatar d976045024 commented on June 5, 2024

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

from srpc.

holmes1412 avatar holmes1412 commented on June 5, 2024

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

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"

from srpc.

Barenboim avatar Barenboim commented on June 5, 2024

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

你可以自己改一下。

from srpc.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.