【问题标题】:Using gcc, I am unable to get 3rd party library, Cairo, to link/compile使用 gcc,我无法让第 3 方库 Cairo 链接/编译
【发布时间】:2013-11-28 08:18:08
【问题描述】:

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

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

我目前在链接器设置中的 CodeBlocks 'Link Libraries' 中有一个选项: /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 topixman_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;
}

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

【问题讨论】:

  • 它正在寻找函数 pixman_image_unref。显然 cairo 依赖于 pixman pixman.org 所以,你也需要链接到那个库。
  • pixman 好像没有安装。你是如何安装 cairo 的?

标签: c gcc compiler-errors linker-errors codeblocks


【解决方案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 $@

.c.o:
    $(CC) $(CFLAGS) $< -o $@

希望它有更多帮助。

干杯

【讨论】:

    【解决方案2】:

    只需使用 -lpixman-1。 当你给 -L/_path_to_lib/ 添加 -lpixman-1 在末尾即

    -L/_path_to_lib/ -lpixman-1
    

    【讨论】:

      【解决方案3】:

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

      对所有正确的包含使用 pkg-config。通过添加自动执行此操作:

      pkg-config --cflags --libs cairo(由“`”包围,在波浪号键上。)

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

      我对链接器“其他选项”选项卡做了同样的事情:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

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

          祝你好运。

          阿尔文

          【讨论】:

          • 抱歉,没有完全正确地读取您的编译器输出。在 pkgconfig 目录中查找 pixman.pc 文件(或类似文件;在我的系统上是 pixman-1.pc) 检查此文件以获取所需的库选项(在我的系统上,它添加了 /usr/lib 的路径并包括 pixman- 1 个库。将此添加到您的 code::blocks 链接库中。
          • 我为链接器提供了几个新的 .a 文件,当然,未定义的引用也会出现新的错误。我尝试在命令行中使用$(pkg-config --cflags --clibs cairo) 无济于事。如何使链接器始终使用 pkg-config?
          猜你喜欢
          • 1970-01-01
          • 2019-10-15
          • 2016-02-12
          • 1970-01-01
          • 2016-05-02
          • 1970-01-01
          • 2015-09-01
          • 1970-01-01
          • 2019-01-30
          相关资源
          最近更新 更多