0

我正在通过 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)

EDIT2:这是我在运行时遇到的错误:

/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

4

1 回答 1

2

我不知道glc-capture,但从你所说的应该可以将你的应用程序直接链接到libglc-capture(尝试-lglc-capture作为链接器标志传递)。如果这不起作用,请查阅库文档。

此外,您必须包含一个包含start_capture. 同样,请查阅库文档以了解要使用的文件。如果没有标头,您仍然可以自己声明它(听起来像一个 C 库,所以沿线的东西extern "C" { void start_capture(); }可能会这样做。

start_capture()如果您的项目在这些更改后仍然可以编译和链接,请在您需要的地方添加调用。

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

于 2013-03-07T12:47:29.403 回答