程序终于编译过去了,记录下碰到的问题及解决方法

来源:本站
导读:目前正在解读《程序终于编译过去了,记录下碰到的问题及解决方法》的相关信息,《程序终于编译过去了,记录下碰到的问题及解决方法》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《程序终于编译过去了,记录下碰到的问题及解决方法》的详细说明。
简介:原来装的Debian操作系统,由于Glibc库太老了,有些程序编译不了,而升级GLibc库难度太大,因为是基础库,一不小心可能系统就崩溃了。同事的Ubuntu系统可以直接用,就干脆换了系统,换了系统之后碰到了几个问题,我之前的程序反而编译不了了,不过最终还是解决了,有点小开心,记录一下。

1、因为用到了`pkg-config --cflags gtk+-2.0 cairo gthread-2.0`,提示Package gtk+-2.0 was not found in the pkg-config search path.

Perhaps you should add the directory containing `gtk+-2.0.pc' to the PKG_CONFIG_PATH environment variable。这个比较简单,添加PKG_CONFIG_PATH环境变量即可,我在Makefile开头添加了这样一句话

export PKG_CONFIG_PATH=/usr/local/tinyX+GTK/lib/pkgconfig

因为我的Gtk+-2.0.pc在这个目录里

2、第一步弄好之后,可以编译了,不过链接的时候出现N多函数未定义,最后跳出collect2: 错误: ld 返回 1的错误,路径肯定不会错,因为已经用-L指定了库的路径,而且在Debian下是可以编译通过的。百度了下有人也碰到过类似问题,居然这样就解决了,原来我是这么写的

$(CC) $(LDLIBS) -lts -lpthread -lXtst -o $(program) $(OBJS) libversion.a

解决方法只是把位置换了一下,改成这样

$(CC) -o $(program) $(OBJS) libversion.a $(LDLIBS) -lts -lpthread -lXtst

把程序的位置跟库的位置交换了一下,这个编译错误就没了,具体原因还没搞明白。

3、再Make一下,还剩一个错误了

/usr/bin/ld: note: 'XKeysymToKeycode' is defined in DSO /usr/local/tinyX+GTK//lib/libX11.so.6 so try adding it to the linker command line

/usr/local/tinyX+GTK//lib/libX11.so.6: could not read symbols: 无效的操作

这个再加上一个-lX11就可以了,不知道为什么原来Debian下不用这么写。

4、再编译就可以通过了,执行的时候会跳出这个错误 error while loading shared libraries: libts-0.0.so.0: cannot open shared object file: No such file or directory,这是因为LD_LIBRARY_PATH没有设置,在终端执行

export LD_LIBRARY_PATH=/usr/local/tinyX+GTK/lib

即可,如果把这个export写到makefile里,执行的时候并没有起作用,make之后,环境变量里并没有LD_LIBRARY_PATH,要在终端执行一下才可以。

提醒:《程序终于编译过去了,记录下碰到的问题及解决方法》最后刷新时间 2024-03-14 01:01:44,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《程序终于编译过去了,记录下碰到的问题及解决方法》该内容的真实性请自行鉴别。