使用gcc,我无法获得第三方库,Cairo,链接/编译

显示的错误是未定义的符号,而不是我从示例中复制的Cairo函数,但我猜是内部函数。 我已经环顾四周并尝试使用$(pkg-config –cflags –libs cairo),逐字使用终端的常见在线示例。

我在使用EXPORT =(我的cairos .ps文件路径)后尝试过。

我目前在链接器设置中的CodeBlocks’链接库’中有一个选项: /usr/lib/x86-linux-gnu/libcairo.a

另外,我的编译器选项中有/usr/include/cairo

错误:

/usr/lib/x86_64-linux-gnu/libcairo.a(cairo-image-source.o)||In function _cairo_image_source_finish':| (.text+0x1c)||undefined reference to pixman_image_unref'|

还有50个更喜欢它。

哪个是从以下生成的,main.c:

 include cairo.h (with # and ) int main() { cairo_surface_t *surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 240, 80); cairo_t *cr = cairo_create (surface); cairo_select_font_face (cr, "serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_set_font_size (cr, 32.0); cairo_set_source_rgb (cr, 0.0, 0.0, 1.0); cairo_move_to (cr, 10.0, 50.0); cairo_show_text (cr, "Hello, world"); cairo_destroy (cr); cairo_surface_write_to_png (surface, "hello.png"); cairo_surface_destroy (surface); return 0; } 

任何帮助修复和理解正在发生的事情都将非常感激。 谢谢。

所以这个问题的解决方案如下:

使用pkg-config获取所有正确的包含。 通过添加以下内容自动执

pkg-config --cflags --libs cairo (在代字键上用“`”包围。)

到编译器设置中的“其他选项”选项卡。

我使用链接器“其他选项”选项卡执行相同的操作:

pkg-config --libs cairo (也被“`”包围,重音坟墓)

现在我构建并编译没有错误,但是当我运行它时,我看不到任何东西,只有一个空的控制台窗口:/

当您使用png表面时,还需要在pkconfig行中包含“cairo-png”。 尝试

$(pkg-config –cflags –libs cairo cairo-png)

有关cairo相关pkg-config选项的完整列表,请查看/ usr / lib / pkgconfig。

祝好运。

阿尔文

它显然意味着链接器无法找到链接所需的所有引用。 具体来说,您的cairo库函数依赖于pixman_image_unref ,该函数位于不同的库中,并且链接器无法找到此库。 您需要包含pixman库或pixman_image_unref可用的任何其他库。

只需使用-lpixman-1。 在结尾处给出-L / _path_to_lib / add -lpixman-1即

 -L/_path_to_lib/ -lpixman-1 

我有同样的问题,我解决了它没有pkg-config,只是链接到/ usr / lib下的libcairo.so。

 g++ -L/usr/lib -lcairo hello.o -o hello 

我第一次尝试使用eclipse luna但没有工作,所以我使用自定义makefile从终端运行它:

 CC=g++ CFLAGS=-c -Wall -I/usr/include/cairo LDFLAGS=-L/usr/lib -lcairo SOURCES=hello.c OBJECTS=$(SOURCES:.c=.o) EXECUTABLE=hello all: $(SOURCES) $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) $(CC) $(LDFLAGS) $(OBJECTS) -o $@ .co: $(CC) $(CFLAGS) $< -o $@ 

希望它有所帮助。

干杯