我正在用cmake和c创建一个项目,其中我需要包含来自不同文件夹的标题,
#include <dbus/dbus.h>
#include <audacious/audctrl.h>
#include <audacious/dbus.h>
#include <pidgin/pidgin.h>我将这些行添加到cmake cofig文件中:
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/
)下面是代码的某些部分:
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);**但是,当我试图构建该项目时,它会返回以下错误:
/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,不需要做类似的事情。
如能提供任何帮助,将不胜感激。
发布于 2020-11-23 03:46:14
当您说target_include_directories时,它将为您找到相应的标头。因此,当您编译并且它没有抱怨您的标题时,这是因为您包含了它们在编译过程中要找到的路径。
我的预感是,在静态链接期间,您没有指定库文件。当您没有像dbus_g_bus_get()这样的东西的定义时,这是因为这些文件的实际定义位于库中。库可以是静态链接的,也可以是动态链接的,并且有.a和.so这样的前缀。您可以在/usr/lib、/lib或/usr/local中找到这些文件,如果您已经通过发行版的包管理器(如apt-get或yum )安装了它们,或者您从源代码中构建了它们。
要解决问题,您可能需要将以下内容添加到cmake文件中:
target_link_libraries(untitled <A> <B> ...)其中<A>可以是以-L为前缀的路径,也可以是库文件的实际绝对路径。
https://stackoverflow.com/questions/64962215
复制相似问题