如何使用外部库中的函数?

时间:2013-03-07 12:36:27

标签: c++ c cmake execute

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

1 个答案:

答案 0 :(得分:2)

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

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

如果您的项目仍然在这些更改后进行编译和链接,请在您需要的位置添加对start_capture()的调用。

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