Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

弱问一个make error #23

Closed
Michael-Ma opened this issue Jun 15, 2014 · 7 comments
Closed

弱问一个make error #23

Michael-Ma opened this issue Jun 15, 2014 · 7 comments
Labels

Comments

@Michael-Ma
Copy link

系统是ubuntu 14.04(虚拟机),package 安装了 openssl libevent-dev cmake imagemagick libmagickwand-dev libmemcached-dev build-essential
编译:
cd zimg
make

错误:

Linking C executable zimg
/usr/bin/ld: CMakeFiles/zimg.dir/lua/lmathlib.c.o: undefined reference to symbol 'fmod@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[3]: *** [zimg] Error 1
make[3]: Leaving directory `/home/xinchenm/zimg/build/zimg'
make[2]: *** [CMakeFiles/zimg.dir/all] Error 2
make[2]: Leaving directory `/home/xinchenm/zimg/build/zimg'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/xinchenm/zimg/build/zimg'
cp: cannot stat ‘zimg’: No such file or directory
make: *** [all] Error 

不知道是不是自己的环境配置的有问题?好像是link不上math库..

@buaazp
Copy link
Owner

buaazp commented Jun 15, 2014

你这个是编译lua的时候缺少引用,可以这样改:
修改src/CMakeLists.txt文件,找到这一行,大约在166行:

set(CMAKE_EXE_LINKER_FLAGS "-L/usr/lib -L/usr/local/lib")

增加 -lm -ldl ,改成:

set(CMAKE_EXE_LINKER_FLAGS "-L/usr/lib -L/usr/local/lib -lm -ldl")

然后重新make:

make clean;
make

@Michael-Ma
Copy link
Author

我加了,但是Error还是一样···

[ 97%] Building C object CMakeFiles/zimg.dir/lua/lbaselib.c.o
[100%] Building C object CMakeFiles/zimg.dir/lua/ldo.c.o
Linking C executable zimg
/usr/bin/ld: CMakeFiles/zimg.dir/lua/lmathlib.c.o: undefined reference to symbol 'fmod@@GLIBC_2.2.5'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libm.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[3]: *** [zimg] Error 1
make[3]: Leaving directory `/home/xinchenm/zimg/build/zimg'
make[2]: *** [CMakeFiles/zimg.dir/all] Error 2
make[2]: Leaving directory `/home/xinchenm/zimg/build/zimg'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/xinchenm/zimg/build/zimg'
cp: cannot stat ‘zimg’: No such file or directory
make: *** [all] Error 1

按理说编译应该不需要改code才能过吧···所以才怀疑是缺少package导致。问一下你是在什么系统环境下测试的?

@buaazp
Copy link
Owner

buaazp commented Jun 16, 2014

恩,这个改动不是code,是cmake的文件。libm是编译lua的依赖,跟zimg没关系。
你试试用apt装一下lua5.1,如果装成功了那说明lua的依赖就全了,然后再编译:

sudo apt-get install lua5.1

@Michael-Ma
Copy link
Author

还是一样的问题唉···

@buaazp
Copy link
Owner

buaazp commented Jun 17, 2014

可能是你虚拟机环境的问题吧,我这也没法帮你调,你自己搜索一下libm.so: error adding symbols: DSO missing (like here)这个问题吧,我看到有很多类似的问题。
zimg的编译经过了travis-cidrone.io 的CI验证,他们俩家的CI环境都是Ubuntu,我自己也在Ubuntu14.04虚拟机上测试过了,都没有问题。

@buaazp buaazp closed this as completed Jun 17, 2014
@Michael-Ma
Copy link
Author

终于fix了,感觉是因为系统版本等问题导致找不到那个库。我虚拟机里的应该是64位的版本。
应该是加-lm -ldl来fix,但是那个加的地方不对,改CMAKE_EXE_LINKER_FLAGS是加在了前面:

/usr/bin/cc   -Wall -fno-strict-aliasing -DPROJECT_VERSION="2.2.0" -D_BSD_SOURCE -D_POSIX_C_SOURCE=200112 -DEVHTP_DISABLE_SSL -DLUA_USE_LINUX -DLUA_ANSI -DZIMG_VERSION=2.2.0 -DMAGICKCORE_HDRI_ENABLE -DMAGICKCORE_QUANTUM_DEPTH=16 -O3 -DNDEBUG -Wall -fno-strict-aliasing  -L/usr/lib -L/usr/local/lib -lm -ldl CMakeFiles/zimg.dir/zmd5.c.o CMakeFiles/zimg.dir/zaccess.c.o CMakeFiles/zimg.dir/zutil.c.o CMakeFiles/zimg.dir/zlog.c.o CMakeFiles/zimg.dir/zhttpd.c.o CMakeFiles/zimg.dir/zimg.c.o CMakeFiles/zimg.dir/main.c.o CMakeFiles/zimg.dir/zcache.c.o CMakeFiles/zimg.dir/zdb.c.o CMakeFiles/zimg.dir/zspinlock.c.o CMakeFiles/zimg.dir/libevhtp/evthr.c.o CMakeFiles/zimg.dir/libevhtp/evhtp.c.o CMakeFiles/zimg.dir/libevhtp/htparse.c.o CMakeFiles/zimg.dir/hiredis/sds.c.o CMakeFiles/zimg.dir/hiredis/net.c.o CMakeFiles/zimg.dir/hiredis/hiredis.c.o CMakeFiles/zimg.dir/lua/lgc.c.o CMakeFiles/zimg.dir/lua/lparser.c.o CMakeFiles/zimg.dir/lua/lfunc.c.o CMakeFiles/zimg.dir/lua/lundump.c.o CMakeFiles/zimg.dir/lua/lcode.c.o CMakeFiles/zimg.dir/lua/lstate.c.o CMakeFiles/zimg.dir/lua/print.c.o CMakeFiles/zimg.dir/lua/ltable.c.o CMakeFiles/zimg.dir/lua/lauxlib.c.o CMakeFiles/zimg.dir/lua/ldump.c.o CMakeFiles/zimg.dir/lua/lopcodes.c.o CMakeFiles/zimg.dir/lua/llex.c.o CMakeFiles/zimg.dir/lua/ltm.c.o CMakeFiles/zimg.dir/lua/liolib.c.o CMakeFiles/zimg.dir/lua/lvm.c.o CMakeFiles/zimg.dir/lua/linit.c.o CMakeFiles/zimg.dir/lua/lmathlib.c.o CMakeFiles/zimg.dir/lua/lzio.c.o CMakeFiles/zimg.dir/lua/lapi.c.o CMakeFiles/zimg.dir/lua/lmem.c.o CMakeFiles/zimg.dir/lua/ldebug.c.o CMakeFiles/zimg.dir/lua/lobject.c.o CMakeFiles/zimg.dir/lua/lstrlib.c.o CMakeFiles/zimg.dir/lua/loadlib.c.o CMakeFiles/zimg.dir/lua/ltablib.c.o CMakeFiles/zimg.dir/lua/ldblib.c.o CMakeFiles/zimg.dir/lua/lstring.c.o CMakeFiles/zimg.dir/lua/loslib.c.o CMakeFiles/zimg.dir/lua/lbaselib.c.o CMakeFiles/zimg.dir/lua/ldo.c.o  -o zimg -rdynamic -levent -levent_pthreads -lMagickWand -lmemcached -lpthread

而正确的做法是加在最后面。所以后来我加到ZIMG_EXTERNAL_LIBS里面就过了···
原来没用过cmake···
多谢~

@buaazp
Copy link
Owner

buaazp commented Jun 20, 2014

赞!原来如此,我也没发现是cmake是这么搞的~
update:
已经更新到master分支里了。

@buaazp buaazp added the build label Aug 11, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants