我正在通过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()的调用。

如果没有帮助,请回到这里。

10-06 14:39