【问题标题】:(C++) glibmm won't link on Ubuntu/Oneiric(C++) glibmm 不会在 Ubuntu/Oneiric 上链接
【发布时间】:2012-01-24 15:16:42
【问题描述】:

我在 Ubuntu/Oneiric 上最简单的程序时遇到问题:

#include <glibmm/ustring.h>

int main()
{
    Glib::ustring s = "Test string";
}

使用 Makefile

PACKAGES=glibmm-2.4 glib-2.0 gtkmm-3.0 gtk+-3.0
CC=g++
CFLAGS=`pkg-config --cflags $(PACKAGES)` --std=c++0x
LD=g++
LDFLAGS=`pkg-config --libs $(PACKAGES)`

build: ./main

run: build
    ./main

clean:
    rm ./main.o

rebuild: clean build

./main: ./main.o
    $(LD) $(LDFLAGS) ./main.o -o ./main

./main.o: ./main.cc
    $(CC) $(CFLAGS) ./main.cc -c -o ./main.o

出现以下错误:

./main.o: In function `main':
main.cc:(.text+0x15): undefined reference to `Glib::ustring::ustring(char const*)'
main.cc:(.text+0x21): undefined reference to `Glib::ustring::~ustring()'
collect2: ld returned 1 exit status
make: *** [main] Error 1

在 Ubuntu/Maverick 上,完全相同的代码可以很好地链接到完全相同的文件... 如果在 main.o 上使用 ld 它也可以成功链接,但是(正如预期的那样)_start 丢失了...

有什么建议吗?

【问题讨论】:

    标签: c++ ubuntu linker glib ubuntu-11.10


    【解决方案1】:

    尝试将相关行更改为:

    LDFLAGS=`pkg-config --libs-only-L --libs-only-other $(PACKAGES)`
    LIBS=`pkg-config --libs-only-l $(PACKAGES)`
    
    # ...
    
    ./main: ./main.o
        $(LD) $(LDFLAGS) ./main.o -o ./main $(LIBS)
    

    原因是链接器可能会按照它们在命令行中给出的顺序搜索库,所以为了安全起见,它们应该总是放在最后。

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 2018-02-01
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      • 2014-06-26
      • 2013-02-15
      • 1970-01-01
      相关资源
      最近更新 更多