首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用cmake添加不同的头文件夹,以使项目正确编译和运行

如何使用cmake添加不同的头文件夹,以使项目正确编译和运行
EN

Stack Overflow用户
提问于 2020-11-23 03:35:04
回答 1查看 77关注 0票数 0

我正在用cmake和c创建一个项目,其中我需要包含来自不同文件夹的标题,

代码语言:javascript
复制
#include <dbus/dbus.h>
#include <audacious/audctrl.h>
#include <audacious/dbus.h>
#include <pidgin/pidgin.h>

我将这些行添加到cmake cofig文件中:

代码语言:javascript
复制
target_include_directories(untitled PRIVATE
    /usr/include/dbus-1.0/;/usr/lib/x86_64-linux-gnu/dbus-1.0/include/;/usr/include/glib-2.0/;
    /usr/lib/x86_64-linux-gnu/glib-2.0/include/;/usr/include/gtk-3.0/;/usr/include/pango-1.0/;/usr/include/cairo/;
    /usr/include/gdk-pixbuf-2.0/;/usr/include/atk-1.0/
)

下面是代码的某些部分:

代码语言:javascript
复制
GError *gError = NULL;
DBusGConnection *dBusGConnection = dbus_g_bus_get(DBUS_BUS_SESSION,gError);
DBusGProxy *dBusGProxy = dbus_g_proxy_new_for_name(dBusGConnection,AUDACIOUS_DBUS_SERVICE,AUDACIOUS_DBUS_PATH,AUDACIOUS_DBUS_INTERFACE);
**audacious_remote_get_main_volume(dBusGProxy);**

但是,当我试图构建该项目时,它会返回以下错误:

代码语言:javascript
复制
 /usr/bin/ld: CMakeFiles/untitled.dir/main.c.o: en la función `main':
`main.c:(.text.startup+0x9): referencia a `dbus_g_bus_get' sin definir
/usr/bin/ld: main.c:(.text.startup+0x22): referencia a `dbus_g_proxy_new_for_name' sin definir
/usr/bin/ld: main.c:(.text.startup+0x2a): referencia a `audacious_remote_get_main_volume' sin definir
collect2: error: ld returned 1 exit status
make[3]: *** [CMakeFiles/untitled.dir/build.make:84: untitled] Error 1
make[2]: *** [CMakeFiles/Makefile2:76: CMakeFiles/untitled.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/untitled.dir/rule] Error 2
make: *** [Makefile:118: untitled] Error 2

我试过所有的例子,在互联网上,试图使它发挥作用,但什么也没有。在这个C/C++的世界里,我是全新的,我来自Java,不需要做类似的事情。

如能提供任何帮助,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-23 03:46:14

当您说target_include_directories时,它将为您找到相应的标头。因此,当您编译并且它没有抱怨您的标题时,这是因为您包含了它们在编译过程中要找到的路径。

我的预感是,在静态链接期间,您没有指定库文件。当您没有像dbus_g_bus_get()这样的东西的定义时,这是因为这些文件的实际定义位于库中。库可以是静态链接的,也可以是动态链接的,并且有.a.so这样的前缀。您可以在/usr/lib/lib/usr/local中找到这些文件,如果您已经通过发行版的包管理器(如apt-getyum )安装了它们,或者您从源代码中构建了它们。

要解决问题,您可能需要将以下内容添加到cmake文件中:

代码语言:javascript
复制
target_link_libraries(untitled <A> <B> ...)

其中<A>可以是以-L为前缀的路径,也可以是库文件的实际绝对路径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64962215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档