我正在通过glc-capture启动OpenGL应用程序。 glc是一个c库,可连接OpenGL缓冲区和x11服务器。
glc需要在OpenGL显示中使用键盘命令才能开始记录OpenGL输出。
但是我的软件应该开始以编程方式记录输出,而不是通过按键记录。
glc文件太复杂了,以至于我的基础知识无法完全理解它们。
但基本上,结构似乎如下:
glc-capture是一个shell脚本,它进行一些设置并执行LD_PRELOAD=libglc-capture.so "${@}"
。 x11.c包含x11挂钩,用于侦听关键事件。正在进行一些初始化。
发生特殊键事件时,功能start_capture()
由x11.c执行。start_capture()
在文件lib.h中定义,并在main.c文件中实现。
我的问题:
如何在自己的C ++应用程序上执行start_capture()函数?
我尝试通过CMakeList.txt
链接库(挂钩和捕获),并包含头文件,但这始终使我处于“未定义的引用: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:
未定义的符号:start_capture
nm的输出:
jrick @ robot2:〜/ fuerte_workspace / sandbox / Bag2Film / lib $ nm
libBag2Film.so | grep捕获
0000000000003a30 t start_capture
0000000000003790 t stop_capture
最佳答案
我不知道glc-capture,但是从您所说的来看,应该可以直接将应用程序与libglc-capture链接(尝试将-lglc-capture
作为链接器标志传递)。如果不起作用,请查阅库文档。
另外,您将必须包含一个包含start_capture
声明的头文件。同样,请查阅库文档以找到要使用的文件。如果没有头文件,您仍然可以自己声明它(听起来像C库,因此extern "C" { void start_capture(); }
行中的内容可能会做到这一点。
如果您的项目在这些更改之后仍然可以编译和链接,请在需要的地方添加对start_capture()
的调用。
如果没有帮助,请回到这里。