我对C ++和所有相关术语和工具链非常陌生。我正在尝试建立一个静态库,客户可以在自己的项目中使用。理想情况下,除了.a和.lib文件,再加上.h文件外,我什么也不想发送。
现在,我的CMake文件如下所示:
project(ava-engine-client)
cmake_minimum_required(VERSION 3.9.6)
set(CMAKE_BUILD_TYPE Release)
set(CMAKE_FIND_LIBRARY_SUFFIXES .a )
add_compile_options(-std=c++11)
# GRPC and Protocol Buffers libraries location
list(APPEND CMAKE_PREFIX_PATH "/opt/grpc" "/opt/protobuf")
# CMake find modules
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
# Recurse and find all the generated Protobuf .cc files
file(GLOB_RECURSE PROTO_GEN_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/ava_engine/ava/*.cc)
include_directories("${CMAKE_CURRENT_SOURCE_DIR}")
# Building the library
add_library(ava_engine_client STATIC src/AvaEngineClient.cc src/AvaEngineClient.h ${PROTO_GEN_SRCS})
target_link_libraries(ava_engine_client ${PROTOBUF_LIBRARIES} ${GRPC_LIBRARY})
## Building Playground
add_executable(playground src/Playground.cc)
target_link_libraries(playground ava_engine_client)
Run Code Online (Sandbox Code Playgroud)
现在,这在链接阶段失败了,因为我没有使用ava_engine_client库中的依赖项链接游乐场目标:
Undefined symbols for architecture x86_64:
"grpc::ClientContext::ClientContext()", referenced from:
...
"grpc::ClientContext::~ClientContext()", referenced from:
...
"grpc::CreateChannel(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> …Run Code Online (Sandbox Code Playgroud) 应该是直截了当的,但是当我编译C++ Hello World代码时,会返回一堆未定义的符号错误.
// my first program in C++
#include <iostream>
using namespace std;
int main ()
{
cout << "Hello World!";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
下面是我如何编译:打开终端,cd到目录,gcc hello.cpp
然后我得到了错误.有什么想法吗?我觉得我可能已经打破了某些......或者我只是遗漏了一些非常明显的东西.任何帮助是极大的赞赏!
继承人的错误:
Undefined symbols for architecture x86_64:
"std::cout", referenced from:
_main in ccfUAf5i.o
"std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from:
_main in ccfUAf5i.o
"std::ios_base::Init::Init()", referenced from:
__static_initialization_and_destruction_0(int, int)in ccfUAf5i.o
"std::ios_base::Init::~Init()", referenced from:
___tcf_0 in ccfUAf5i.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)