首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(C++) glibmm不会在Ubuntu/Oneiric上链接

(C++) glibmm不会在Ubuntu/Oneiric上链接
EN

Stack Overflow用户
提问于 2012-01-24 23:16:43
回答 1查看 648关注 0票数 1

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

代码语言:javascript
复制
#include <glibmm/ustring.h>

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

使用Makefile

代码语言:javascript
复制
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

在执行以下操作时出现以下错误:

代码语言:javascript
复制
./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丢失了……

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2012-01-24 23:25:48

尝试将相关行更改为:

代码语言:javascript
复制
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)

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8989235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档