LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: Yuri

程序编译问题ld

[复制链接]
发表于 2007-6-6 11:46:13 | 显示全部楼层
libdmtx 它不是用 configure 生成 Makefile 的,而是用一个现成的 Makefile 来编译的。这里就存在一个问题,cygwin 下似乎不支持动态库 .so,而只支持静态库 .a(我想看 ls /lib 的结果便在于此),而它的 Makefile 中却是明确指明要生成 .so

  1. # Makefile

  2. all: test util

  3. util: libdmtx.so

  4. libdmtx.so: libdmtx.so.0.3.0

  5. libdmtx.so.0.3.0: $(SOURCES)
  6.         $(CC) $(CFLAGS) $(LIBFLAGS) -shared -Wl,-soname,libdmtx.so.1 -Wl,-export-dynamic \
  7.                 -o libdmtx.so.0.3.0 dmtx.c -lc -lm
复制代码

realtang 兄的意思应该就是说,把 Makefile 改一下,让它生成 .a 静态库就可以了。话说我只知道用 libtool 生成库,具体到 gcc 就不知道该用何样的参数了,请 realtang 兄指点一下吧
回复 支持 反对

使用道具 举报

发表于 2007-6-6 17:15:45 | 显示全部楼层
DoDo兄说的也是可行的。
你改一下libdmtx的Makefile好了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-6 17:37:36 | 显示全部楼层
我做了个ln再编译也不管用
[php]
lrwxrwxrwx  1 Administrator None    10 Jun  6 08:48 libdmtx.a -> libdmtx.so
lrwxrwxrwx  1 Administrator None    10 Jun  6 08:48 libdmtx.dll -> libdmtx.so
lrwxrwxrwx  1 Administrator None    10 Jun  6 08:48 libdmtx.dll.a -> libdmtx.so
[/php]
回复 支持 反对

使用道具 举报

发表于 2007-6-6 22:55:09 | 显示全部楼层
不是简单的改个名字就可以解决的。so 和 a 是有本质的不同的。貌似用 ar 可以生成 .a ?具体的不了解。楼主最好查一下如何生成 .a 静态库
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-7 10:09:36 | 显示全部楼层
我用ar -rsv  ./libdmtx.a libdmtx.so.0.3.0生成.a
然后改Makefile改成这样

  1. INCLUDE=-I../.. -I/lib -I/usr/include/SDL
  2. LD_LIBRARY_PATH="../../:/usr/lib:/lib"
  3. LIBS=-L../.. -Li/home/Administrator/libdmtx -ldmtx -lpng -lm -lGL -lGLU -lSDL -lpng -lpthread
  4. #CFLAGS=-Wall -g -pg
  5. CFLAGS=-Wall -static -lstatic
  6. OBJECTS=gltest.o image.o display.o callback.o

  7. all: gltest

  8. clean:
  9.         rm -f *.o gltest gmon.out

  10. gltest: $(OBJECTS)
  11.         gcc $(LIBS) $(CFLAGS) $(OBJECTS) -o gltest

  12. gltest.o: gltest.c
  13.         gcc $(INCLUDE) $(CFLAGS) -c gltest.c

  14. image.o: image.c image.h
  15.         gcc $(INCLUDE) $(CFLAGS) -c image.c

  16. display.o: display.c display.h
  17.         gcc $(INCLUDE) $(CFLAGS) -c display.c

  18. callback.o: callback.c callback.h
  19.         gcc $(INCLUDE) $(CFLAGS) -c callback.c

  20. .PHONY: all clean
复制代码

编译的错误信息如下
[php]
Yuri#make
gcc -L../.. -Li/home/Administrator/libdmtx -ldmtx -lpng -lm -lGL -lGLU -lSDL -lp
ng -lpthread -Wall -static -lstatic gltest.o image.o display.o callback.o -o glt
est
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot find
-lGL
collect2: ld returned 1 exit status
make: *** [gltest] 错误 1
Yuri#
[/php]
回复 支持 反对

使用道具 举报

发表于 2007-6-7 10:52:55 | 显示全部楼层
还要链接opengl的库。
回复 支持 反对

使用道具 举报

发表于 2007-6-7 11:22:59 | 显示全部楼层
gcc -lxxx 表示要连接 libxxx.so 或者 libxxx.a 这样的库,它会在系统的默认位置(一般就是 /lib, /usr/lib)或者是参数指定的位置(比如 -L../../ )去寻找这样的库。
gcc -o foo -lxxx foo.o
也可以用
gcc -o foo foo.o /path/to/libxxx.a
来代替。这样楼主就可以知道,为了编译此程序,你需要 libpng libm libGL libGLU libSDL libpthread,其中, libm,libpthread 应该都是 glibc 中提供的,其它的几个就都要楼主自己先安装好才能继续你的编译
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-7 14:35:02 | 显示全部楼层
明白.
libpng libm libGL libGLU libSDL libpthread
SDL
PNG都已经有了,昨天就加上了.
可是cygwin我一直在找他的opengl硬是没有这个东西.
还有glibc在cygwin下有这个么?
回复 支持 反对

使用道具 举报

发表于 2007-6-8 08:57:11 | 显示全部楼层
opengl就是libGL
回复 支持 反对

使用道具 举报

发表于 2007-8-2 09:55:57 | 显示全部楼层
Yuri您好,我想请教一下,libdmtx中的图像分数分割 问题,它对整个图像分成 高宽 分成2.5,分份的原则是什么呢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表