Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake错误生成库_Cmake_Makefile_Protocol Buffers_Protobuf C - Fatal编程技术网

Cmake错误生成库

Cmake错误生成库,cmake,makefile,protocol-buffers,protobuf-c,Cmake,Makefile,Protocol Buffers,Protobuf C,我编写了简单的Protobuf-C库。在将其编译为lib时,我有以下错误: Scanning dependencies of target ArgentumTracer-native [ 16%] Building C object CMakeFiles/ArgentumTracer-native.dir/src/sources/http_sender.c.o /Users/rmuhamedgaliev/Projects/ArgentumTracer-native/src/sources/htt

我编写了简单的Protobuf-C库。在将其编译为lib时,我有以下错误:

Scanning dependencies of target ArgentumTracer-native
[ 16%] Building C object CMakeFiles/ArgentumTracer-native.dir/src/sources/http_sender.c.o
/Users/rmuhamedgaliev/Projects/ArgentumTracer-native/src/sources/http_sender.c:36:33: warning: incompatible pointer types passing 'in_addr_t *' (aka 'unsigned int *') to parameter of type 'struct in_addr *' [-Wincompatible-pointer-types]
    if ( inet_aton(SERVER_ADDR, &dest.sin_addr.s_addr) == 0 )
                                ^~~~~~~~~~~~~~~~~~~~~
/usr/include/arpa/inet.h:83:47: note: passing argument to parameter here
int              inet_aton(const char *, struct in_addr *);
                                                         ^
1 warning generated.
[ 33%] Building C object CMakeFiles/ArgentumTracer-native.dir/src/sources/main_agent.c.o
[ 50%] Building C object CMakeFiles/ArgentumTracer-native.dir/src/sources/VMInfo.pb-c.c.o
Linking C executable ArgentumTracer-native
[ 50%] Built target ArgentumTracer-native
Scanning dependencies of target argentumtracer
[ 66%] Building C object CMakeFiles/argentumtracer.dir/src/sources/http_sender.c.o
/Users/rmuhamedgaliev/Projects/ArgentumTracer-native/src/sources/http_sender.c:36:33: warning: incompatible pointer types passing 'in_addr_t *' (aka 'unsigned int *') to parameter of type 'struct in_addr *' [-Wincompatible-pointer-types]
    if ( inet_aton(SERVER_ADDR, &dest.sin_addr.s_addr) == 0 )
                                ^~~~~~~~~~~~~~~~~~~~~
/usr/include/arpa/inet.h:83:47: note: passing argument to parameter here
int              inet_aton(const char *, struct in_addr *);
                                                         ^
1 warning generated.
[ 83%] Building C object CMakeFiles/argentumtracer.dir/src/sources/main_agent.c.o
[100%] Building C object CMakeFiles/argentumtracer.dir/src/sources/VMInfo.pb-c.c.o
Linking C shared library libargentumtracer.dylib
Undefined symbols for architecture x86_64:
  "_protobuf_c_message_free_unpacked", referenced from:
      _vminfo__free_unpacked in VMInfo.pb-c.c.o
  "_protobuf_c_message_get_packed_size", referenced from:
      _vminfo__get_packed_size in VMInfo.pb-c.c.o
  "_protobuf_c_message_pack", referenced from:
      _vminfo__pack in VMInfo.pb-c.c.o
  "_protobuf_c_message_pack_to_buffer", referenced from:
      _vminfo__pack_to_buffer in VMInfo.pb-c.c.o
  "_protobuf_c_message_unpack", referenced from:
      _vminfo__unpack in VMInfo.pb-c.c.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [libargentumtracer.dylib] Error 1
make[1]: *** [CMakeFiles/argentumtracer.dir/all] Error 2
make: *** [all] Error 2
CMakeLists.txt

cmake_最低要求版本3.1 ProjectAgentumTracer本机 setCMAKE_CXX_FLAGS${CMAKE_CXX_FLAGS}-std=c++11 查找所需的\u PACKAGEJava 查找所需的_PACKAGEJNI INCLUDE_目录${JAVA_INCLUDE_路径} INCLUDE_目录${JAVA_INCLUDE_路径2} fileGLOB SOURCE_文件src/sources/*.c src/sources/*.h 添加_executablergentumtracer-native${SOURCE_FILES} 添加\u LibraryAgentumTracer共享${SOURCE\u FILES}
target_link_librariesArgentumTracer-native protobuf-c正如我在评论中所建议的,您需要使用CMake查找protobuf并将protobuf库添加到您的target_link_库中。链接中明确说明了库protobuf-c,但这并不是一个真正的傻瓜式方法。可以肯定的是,你应该尝试以下方法

find_package(Protobuf MODULE)
if(NOT PROTOBUF_FOUND)
  message(FATAL_ERROR "-- Protobuf is required!")
endif()

target_link_libraries(ArgentumTracer-native ${PROTOBUF_LIBRARIES})

现在,您可以确定您拥有正确的库。此外,如果找不到protobuf,您将知道find_包何时失败,并有机会向CMake提供真实位置。

您至少需要共享CMake代码。乍一看,您似乎没有正确找到/链接protobuf库。我将完整的源代码放在了存储库中。