【发布时间】:2020-04-13 02:01:29
【问题描述】:
我编写了一个 C 程序来使用 GStreamer 和 GTK 窗口显示内存映射的视频文件。目的是用 CFFI 构建一个可以从 Python 调用的共享库。当我尝试导入库时,我收到一条报告未定义符号的消息。
我用一个包含一个只显示一个窗口的小程序的库重新创建了这个问题:
#include <gtk/gtk.h>
#include "test_cdef.h"
int main (int argc, char *argv[])
{
return test();
}
int test()
{
GtkWidget *main_window;
gtk_init (NULL, NULL);
main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(main_window), "Test");
gtk_window_set_default_size(GTK_WINDOW(main_window), 1600, 900);
gtk_widget_show_all(main_window);
g_main_loop_run (g_main_loop_new (NULL, TRUE));
return 0;
}
当我尝试导入库时,我收到以下消息:
ImportError: [library file name]: undefined symbol: gtk_window_get_type
经过大量搜索,似乎最接近我的问题已通过更改编译器/链接选项得到解决。我使用 gcc 来构建程序。我假设 CFFI 使用相同的方法来构建库。
如果应该更改这些选项,我会有两个问题:(1) 应该使用哪些选项,以及 (2) 这些选项如何传达给 CFFI?对于任何一个问题,我都将不胜感激。
我的操作系统是 Linux Mint 19.3。其他包有 GTK-3.0、python 3.6.9、python3-cffi 1.11.5-1。
任何帮助将不胜感激。
【问题讨论】:
标签: python shared-libraries linker