所以我现在和cmake斗争了一段时间。我想从这里使用xmlrpc-c库。所以我用main.cpp和cmakelists.txt启动了一个新项目,并将xmlrpc-c作为子目录复制到我的项目中(因为不幸的是xmlrpc-c不是cmake库):
我的代码正是这里的一个示例,看起来如下所示:
#include <iostream>
#include <string>
#include "xmlrpc-c/include/xmlrpc-c/base.hpp"
#include "xmlrpc-c/include/xmlrpc-c/registry.hpp"
#include "xmlrpc-c/include/xmlrpc-c/server_abyss.hpp"
using namespace std;
class hello : public xmlrpc_c::method
{
public:
void execute(const xmlrpc_c::paramList& params, xmlrpc_c::value* retval)
{
string msg(params.getString(0));
params.verifyEnd(1);
cout << msg << endl;
*retval = xmlrpc_c::value_string("XMLRPC server says hello!");
}
};
int main(int argc, char** argv)
{
xmlrpc_c::registry registry;
registry.addMethod("hello", new hello);
xmlrpc_c::serverAbyss server(xmlrpc_c::serverAbyss::constrOpt().registryP(®istry).portNumber(8080));
server.run();
return 1;
}
cmakelists.txt如下所示
cmake_minimum_required(VERSION 3.16)
project(xmlrpc_c_server C CXX)
add_executable(xmlrpc_c_server main.cpp)
target_link_libraries(xmlrpc_c_server -lxmlrpc++ -lxmlrpc_server++ -lxmlrpc_server_abyss++ -lxmlrpc_util++)
我遇到的问题是,我的构建过程失败了,出现了一个链接器错误:据我所知,头文件registry.hpp
没有正确包含。如果我注释掉代码行registry.addMethod(“hello”,新的hello);
,我就可以编译程序而没有任何错误。
====================[ Build | xmlrpc_c_server | Debug ]=========================
/usr/bin/cmake --build /mnt/c/Users/valentin.ackva/CLionProjects/xmlrp-c-server/cmake-build-debug --target xmlrpc_c_server -- -j 9
Scanning dependencies of target xmlrpc_c_server
[ 50%] Building CXX object CMakeFiles/xmlrpc_c_server.dir/main.cpp.o
[100%] Linking CXX executable xmlrpc_c_server
/usr/bin/ld: CMakeFiles/xmlrpc_c_server.dir/main.cpp.o: in function `main':
/mnt/c/Users/struppel/CLionProjects/xmlrp-c-server/main.cpp:31: undefined reference to `xmlrpc_c::registry::addMethod(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, xmlrpc_c::method*)'
collect2: error: ld returned 1 exit status
make[3]: *** [CMakeFiles/xmlrpc_c_server.dir/build.make:84: xmlrpc_c_server] Error 1
make[2]: *** [CMakeFiles/Makefile2:76: CMakeFiles/xmlrpc_c_server.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/xmlrpc_c_server.dir/rule] Error 2
make: *** [Makefile:118: xmlrpc_c_server] Error 2
少了什么?
由于您要使用的库没有cmake
项目,所以您需要自己处理这个问题。我建议使用add_subdirectory
并创建一个子项目,在该项目中构建库(根据需要,可以是共享的,也可以是静态的)。
此外,您需要将cmake
指向头的位置。尝试手动将缺少的内容添加到add_executable
或使用include_directories
并相应地调整#include
。
您也可以使用它的一些非官方的cmake
版本,比如这个版本。如果您正在使用git
,那么您可以将repo添加为一个子模块,并将来自该repo的代码集成到您的主项目中。
既然您是CMake的新手,也许值得看一下教程?
https://cliutils.gitlab.io/modern-cmake/
我想这对你的困惑会有很大帮助。
?> Hello world,世界 你好 本节选择了一个最简单的例子 Helloworld 来演练一下 cmake 的完整构建过程,本节并不会深入的探讨 cmake,仅仅展示一个简单的例子,并加以粗略的解释。我们选择了Everest Linux 作为基本开发平台,因为这个只有一张 CD 的发行版本,包含了 gcc4.2/gtk/qt3/qt4等完整的开发环境,同时,系统默认集成了 cmake 最新
本文向大家介绍Java初学者常问的问题(推荐),包括了Java初学者常问的问题(推荐)的使用技巧和注意事项,需要的朋友参考一下 本文介绍一些Java初学者常问的问题,可以用%除以一个小数吗? a += b 和 a = a + b 的效果有区别吗? 声明一个数组为什么需要花费大量时间? 为什么Java库不用随机pivot方式的快速排序? 基本数据类型 Q. 为什么 -0/3 结果是 0,而 -0.0
src/cmakelists.txt: src/sqr.h src/sqr.cpp null
但我很快就发现自己陷入了困境:有页面、模型,也许数据库需要这种场景,似乎有很多事情要做。 我现在该怎么办?我是否需要与所有涉众讨论此方案?对于,我不认为他们真的关心实现,与其他开发人员讨论一下是不是一个好主意? 假设在我与其他一些开发人员讨论之后,我们同意将其拆分为几个小的部分。我们是否可以用格式使这些小部件成为“scenario”,就像我们刚才对cucumber-jvm所做的那样,或者我们是否可
我有一个.aar库项目,它是第三方付费的.jar lib的包装器。我想分发我的.aar(第三方.jar的包装器)。 但是当我试图在应用程序项目中使用我的.aar文件时,我能够非常清楚地看到第三方的.jar文件及其类。我想隐藏第三方付费的.jar文件,我的意思是使用我的.aar文件的开发人员不应该看到.jar(第三方文件)文件。 我的.aar项目在编译和运行时也需要第三方的.jar库。但是,使用我的
我在Eclipse中有一个spring boot项目。我在项目构建路径中添加了一个外部第三方jar,它不是maven依赖项。现在,我可以从我需要的jar中导入2个类,并编写了一些实现。现在,当我试图用构建maven项目时,我使用的2个导入程序编译失败。错误显示:包不存在。 我在配置部分遗漏了什么吗?我已经在项目构建路径中将jar添加为外部jar。然后我已经清洁编译了项目。在由maven构建的spr