我正在通过glc-capture启动OpenGL应用程序。 glc是一个挂在OpenGL缓冲区和x11服务器上的c库。 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)
EDIT2: 这是我在运行时得到的错误:
/ opt / ros / fuerte / stacks / visualization / rviz / bin / rviz:符号查找 错误: /home/jrick/fuerte_workspace/sandbox/Bag2Film/lib/libBag2Film.so: undefined symbol:start_capture
nm的输出:
jrick @ robot2:〜/ fuerte_workspace / sandbox / Bag2Film / lib $ nm libBag2Film.so | grep capture
0000000000003a30 t start_capture
0000000000003790 t stop_capture
答案 0 :(得分:2)
我不知道glc-capture,但是根据你所说的,应该可以直接使你的应用程序对抗libglc-capture(尝试传递-lglc-capture
作为链接器标志)。如果不起作用,请查阅库文档。
此外,您还必须包含一个包含start_capture
声明的头文件。再次,请查阅库文档以了解要使用的文件。如果没有标题,你仍然可以自己声明它(听起来像一个C库,所以extern "C" { void start_capture(); }
行可能会这样做。
如果您的项目仍然在这些更改后进行编译和链接,请在您需要的位置添加对start_capture()
的调用。
如果没有帮助,请回到这里。