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

    原来装的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,要在终端执行一下才可以

猜你喜欢

转载自blog.csdn.net/tracing/article/details/11947529