Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.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
C++ 与节俭挂钩_C++_Linux_Cmake_Gnu Make_Thrift - Fatal编程技术网

C++ 与节俭挂钩

C++ 与节俭挂钩,c++,linux,cmake,gnu-make,thrift,C++,Linux,Cmake,Gnu Make,Thrift,当试图将我的可执行文件与使用thrift的库链接时,我得到了对“typeinfo for apache::thrift::transport::TTTransportException”(以及其他符号)的未定义引用。我在Ubuntu18.04上使用GCC7.3.0,在CLion中使用CMake构建 我花了一天的时间在谷歌上搜索这个问题,访问了网站和链接之后,我被卡住了 CMake命令如下所示 对于我的共享对象: 目标链接库(服务器接口) ETC客户 拓扑协议 事件 ${节俭图书馆} ${Boos

当试图将我的可执行文件与使用thrift的库链接时,我得到了对“typeinfo for apache::thrift::transport::TTTransportException”(以及其他符号)的
未定义引用。我在Ubuntu18.04上使用GCC7.3.0,在CLion中使用CMake构建
我花了一天的时间在谷歌上搜索这个问题,访问了网站和链接之后,我被卡住了

CMake命令如下所示

对于我的共享对象:

目标链接库(服务器接口)
ETC客户
拓扑协议
事件
${节俭图书馆}
${Boost_库}
lzo2
sqlite3
金色后河
${SPDK_LIBS}
${DPDK_LIBS}
grpc
grpc++
gtest
格洛克
xml2
stdc++fs
bfd
-l:libisal,所以
sgutils2
pthread
uuid
rt
)
可执行的CMake命令:

目标链接库(kserver)
服务器
${节俭图书馆}
)
由CMake生成的链接器命令:

cmake\u link\u脚本CMakeFiles/kserver.dir/link.txt--verbose=1
/usr/bin/c++-O3-DNDEBUG CMakeFiles/kserver.dir/main.cpp.o-o kserver-L/server/ext/spdk/build/lib-L/server/ext/spdk/dpdk/build/lib-L/server/ext/isal/lib-Wl,-rpath,/server/ext/spdk/build/lib:/server/ext/spdk/dpdk/build/lib:/server/ext/isal/lib:/server/cmake build release/lib/local/lib:/server/cmake build release/ext/etcd:/server/cmake build release/protocols./。/lib/proj/libproj.so/usr/local/libthrift.so/usr/local/libthriftnb/libthriftnb.so./。/ext/etcd/libetcdclient.so../../protocols/libTopologyProtocols.so/home/user/vcpkg/installed/x64 linux/lib/libprotobuf.a-levent/usr/local/lib/libthrift.so/usr/local/libthriftnb.so/home/user/vcpkg/installed/x64 linux/lib/libboost_system.a-llzo2/home/user/vcpkg/installed/x64 linux/lib/lib/libsqlite3.a-lpthread-ldl-lzmq-lspdk-lddk-lg-rpc-lg-lg++-lg-lxml2-lstdc++fs-lbfd-l:libisal.so.2-lsgutils2-lpthread-luuid-lrt
该命令看起来非常好,它与
thrift
thriftnb
事件链接
在编译器和常规项目设置中,这里是源根目录中的根CMakeList.txt的内容


示例编译命令

/usr/bin/c++  -DBOOST_COROUTINES_NO_DEPRECATION_WARNING -DGTEST_LINKED_AS_SHARED_LIBRARY -Dserver_EXPORTS -I/home/user/sourcelib/include/server -I/home/user/sourcelib/include -I/home/user/sourceext/spdk/include -I/home/user/sourcecmake-build-release/ext/etcd -I/home/user/sourcecmake-build-release/protocols -I/home/user/vcpkg/installed/x64-linux/include  -O3 -DNDEBUG -fPIC   -include server.h -march=native -std=gnu++1z -o CMakeFiles/server.dir/misc/ServerHost.cpp.o -c /home/user/sourcelib/server/misc/ServerHost.cpp

我做错了什么?

我花了两天时间才发现我的机器上安装了某个深奥的版本,在手动删除它并使用
vcpgg
提供的版本后,软件包管理器没有意识到它。

目前很难说。CMake是否用C++编译器构建了所有C++源?您可以使用包含
-feexceptions-frti
cxflags
进行一次尝试。添加了编译命令和父CMake文件内容-据我所知,默认情况下启用的FEExceptions对RTTI并不确定。异常和RTTI如何(以及为什么)影响链接?
/usr/bin/c++  -DBOOST_COROUTINES_NO_DEPRECATION_WARNING -DGTEST_LINKED_AS_SHARED_LIBRARY -Dserver_EXPORTS -I/home/user/sourcelib/include/server -I/home/user/sourcelib/include -I/home/user/sourceext/spdk/include -I/home/user/sourcecmake-build-release/ext/etcd -I/home/user/sourcecmake-build-release/protocols -I/home/user/vcpkg/installed/x64-linux/include  -O3 -DNDEBUG -fPIC   -include server.h -march=native -std=gnu++1z -o CMakeFiles/server.dir/misc/ServerHost.cpp.o -c /home/user/sourcelib/server/misc/ServerHost.cpp