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

标签 c++ c cmake execute

我正在通过 glc-capture 启动 OpenGL 应用程序。 glc 是一个 c 库,它 Hook 在 OpenGL 缓冲区和 x11 服务器上。 glc 需要 OpenGL 显示中的一个键命令来开始记录 OpenGL 输出。

但我的软件应该开始以编程方式记录输出,而不是通过按键。 glc 文件太复杂了,我的基础知识无法完全理解它们。 但基本上结构似乎如下:

glc-capture是一个 shell 脚本,它进行一些设置并执行 LD_PRELOAD=libglc-capture.so "${@}"x11.c包含用于监听关键事件的 x11 Hook 。正在进行一些初始化。 在特殊按键事件上,函数 start_capture()x11.c 执行. start_capture() 在文件 lib.h 中定义并在 main.c 中实现文件。

我的问题: 如何在我自己的 C++ 应用程序上执行 start_capture() 函数? 我尝试通过 CMakeList.txt 链接库( Hook 和捕获)并包含头文件,但这总是让我处于“ undefined reference :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: symbol lookup error: /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

最佳答案

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

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

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

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

关于c++ - 如何使用外部库中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15271426/

相关文章:

c++ - 从 QAbstractItemModel 返回自定义用户类型

c++ - 如何将子方法调用到父方法中

使用 cJSON.h 创建 json 对象

c++ - 我可以在我的 cmake 代码中手动使用 CMake 的 cpp 文件依赖扫描器吗?

makefile - 为什么 "make"在 "make install"之前

c++ - 字符串 "sizeof"的意外结果

c++ - 对数组索引中使用的 int -0 的引用发出警告

c++ - 链表删除和复制

c - 二叉搜索树的递归

c++ - Android Studio 中的 Gradle 任务排序问题