-
Notifications
You must be signed in to change notification settings - Fork 388
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
Android compile problem #336
Comments
指定openssl include和so路径后,报错如下: |
改成std::getline提示参数不匹配。只有2个参数,实际传了三个。 |
我们看看先前能在Android上编译过的版本对比一下,看看是不是后来加的、是否需要替换掉这个函数。 |
thank you very much,想问一下你们之前在Android上面编译有文档么? |
sogou/workflow#773 |
目前workflow android可以编译通过,srpc还不行。 |
感觉这个是OPENSSL_CRYPTO_LIBRARY缺少了,你尝试一下手动指定一下?比如 set(OPENSSL_CRYPTO_LIBRARY /path/to/openssl/lib/libcrypto.a) 一般来说通过 不过这个crypto包workflow也需要,感觉crypto本身不应该有区别才是~ |
再请教一下protobuf_generate_cpp这个是调用本机的protoc的么,而非host的,目前我指定的protobuf dir是host主机的,不知道这块怎么设置 |
protobuf_generate_cpp会由CMake 自动查找 protoc 工具的路径。CMake 会首先查找系统路径,如果找不到,则会查找 PROTOBUF_PROTOC_EXECUTABLE 变量指定的路径。如果 PROTOBUF_PROTOC_EXECUTABLE 变量未设置,则会使用默认路径 /usr/bin/protoc。 这个得看你find_package(protobuf)用的是哪个路径,需要libprotobuf.so和protoc版本对应。如果这里不确定,要不你手动指定一下 |
手动指定,如下方式,还是提示unknown command protobuf_generate_cpp |
试试set (PROTOBUF_PROTOC_EXECUTABLE /home/barton/work/protobuf-3.14.0/src/protoc) ? |
set (PROTOBUF_PROTOC_EXECUTABLE /home/barton/work/protobuf-3.14.0/src/protoc)这个设置之后还是会提示unknown command protobuf_generate_cpp |
虽然不太了解Android下的依赖应该怎么写,但是看了下当时workflow支持Android的时候,cmake文件里都进行了如下改动: 参考文件:https://github.com/sogou/workflow/blob/master/src/CMakeLists.txt 1、编译时,依赖库通过交叉编译指定的路径: if(ANDROID)
include_directories(${OPENSSL_INCLUDE_DIR})
link_directories(${OPENSSL_LINK_DIR})
else()
find_package(OpenSSL REQUIRED)
endif () 2、链接时,依赖库需要明确指定一下: if(ANDROID)
target_link_libraries(${SHARED_LIB_NAME} ssl crypto c)
else()
target_link_libraries(${SHARED_LIB_NAME} OpenSSL::SSL OpenSSL::Crypto pthread)
endif () 要不你试试把这里:https://github.com/sogou/srpc/blob/master/src/CMakeLists.txt#L154 模仿Workflow里的写法?比如(但不一定正确,需要你在环境里调一下) if (APPLE)
target_link_libraries(${SHARED_LIB_NAME} OpenSSL::SSL OpenSSL::Crypto pthread protobuf workflow z ${SNAPPY_LIB} ${LZ4_LIB})
if (ANDROID) # 写法不一定正确,大概这么个想法?
target_link_libraries(${SHARED_LIB_NAME} ssl crypto c protobuf workflow z snappy)
else ()
target_link_libraries(${SHARED_LIB_NAME})
endif () 如果确认了src/CMakeLists.txt和tutorial/CMakeLists.txt的正确改法,可以给srpc提一个PR,感谢~ |
修改的文件如下: set(protobuf_MODULE_COMPATIBLE ON CACHE BOOL "") elseif(ANDROID) |
另外请教一下,编译出so后,在编译sample的时候出现如下错误: |
|
改动的东西比较零散,等我有空看看能不能整合成一个脚本 |
好的,感谢,不急。 |
目前看srpc依赖的libcrypto和libssl以及libprotobuf和Android系统的有冲突,目前只能应用到apk里面。服务里面不可以。 |
when I config android cross compile,and build srpc, I met the following error
workflow/_include/workflow/Communicator.h:28:10: fatal error: 'openssl/ssl.h' file not found
since android ndk has no openssl,How can I config this?
I try to do this:https://segmentfault.com/a/1190000004522943
but seems I build 64 bit so.
The text was updated successfully, but these errors were encountered: