C++ 如何使用外部库中的函数?
我正在通过glc捕获启动OpenGL应用程序。glc是一个c库,它钩住了OpenGL缓冲区和x11服务器。 glc需要OpenGL显示中的一个键命令来开始记录OpenGL输出 但是我的软件应该开始以编程方式记录输出,而不是通过按键。 glc文件太复杂了,我的基本知识无法完全理解它们。 但基本上结构如下所示: 是一个shell脚本,它执行一些设置并执行C++ 如何使用外部库中的函数?,c++,c,cmake,execute,C++,C,Cmake,Execute,我正在通过glc捕获启动OpenGL应用程序。glc是一个c库,它钩住了OpenGL缓冲区和x11服务器。 glc需要OpenGL显示中的一个键命令来开始记录OpenGL输出 但是我的软件应该开始以编程方式记录输出,而不是通过按键。 glc文件太复杂了,我的基本知识无法完全理解它们。 但基本上结构如下所示: 是一个shell脚本,它执行一些设置并执行LD_PRELOAD=libglc-capture.so“${@}”。包含用于侦听密钥事件的x11挂钩。正在进行一些初始化。 在特殊按键事件中,函数
LD_PRELOAD=libglc-capture.so“${@}”
。包含用于侦听密钥事件的x11挂钩。正在进行一些初始化。
在特殊按键事件中,函数start\u capture()
由执行。
start\u capture()
在文件中定义并在文件中实现
我的问题:
如何在我自己的C++应用程序上执行StaskSCAPETION()函数?< /强>
我试图通过CMakeList.txt
链接库(hook和capture),并包含头文件,但这总是让我处于“未定义引用:start_capture()”状态
以下是链接库的CMakeList.txt中的行:
target_link_libraries(${PROJECT_NAME} ${QT_LIBRARIES} libglc-hook.so libglc-capture.so libglc-core.so libglc-export.so)
编辑2:
以下是我在运行时遇到的错误:
/opt/ros/fuerte/stacks/visualization/rviz/bin/rviz:符号查找
错误:
/home/jrick/fuerte_workspace/sandbox/Bag2Film/lib/libBag2Film.so:
未定义的符号:开始捕获
nm的输出:
jrick@robot2:~/fuerte_工作区/sandbox/Bag2Film/lib$nm
libBag2Film.so | grep捕获
000000000000 3A30无法启动捕获
0000000000003790 t停止捕捉
我不知道glc capture,但根据您的说法,应该可以直接将应用程序链接到libglc capture(尝试将
-lglc capture
作为链接器标志传递)。如果不起作用,请查阅图书馆文档
此外,还必须包含一个头文件,其中包含start\u capture
的声明。同样,请参阅库文档以了解要使用的文件。如果不存在头,您仍然可以自己声明它(听起来像是一个C库,因此类似于extern“C”{void start_capture();}
的东西可能会这样做
如果您的项目在这些更改后仍在编译和链接,请在需要的地方添加对start\u capture()
的调用
如果没有帮助,请回到这里。< / P>你能显示链接的CMAKLIST吗?我把链接添加到了链接中。或者你需要ToxTXT文件吗?你确定你需要.so文件扩展吗?那个LIB。h不是C++安全的,如果你想用C++代码调用它,你需要添加外部的“C”。是的,没有它们就无法编译。啊,谢谢你的提示!谢谢你的回答。我在lib.h中添加了'extern“C”{int start_capture();}',并删除了旧的include。lib.h包含在我的类中。但是一旦我执行start_capture();我收到一个未定义的符号错误。头文件lib.h知道在哪里可以找到实现吗?嗯…这似乎不对。通常,您无法执行链接器未找到的函数。错误是否在编译时、链接时或运行时出现?请发布错误消息。错误仅在运行时出现。我不确定现在我修改了原来的lib.h并把它放在我的src文件夹中,将它添加到我的CMakeList.txt中。在lib.h中,我添加了extern“C”如果函数有一个<代码> LIB。h <代码>声明“代码> StastCopys<代码>应该是好的。你必须确定它是C还是C++头。如果它是C,而你自己的程序是C++,你应该把包括在