我用ubuntu中vim编写了一个小程序用了sin函数,但是却编译不了
我用root@ubuntu:/root# nm -o /lib/*.so|grep sin查找sin函数但是也找不到,出现了下面的语句:
nm: /lib/klibc-YHMcsdavQye9iuNwPByVrU6ZqHQ.so: no symbols
nm: /lib/libproc-3.2.8.so: no symbols
然后又用# ls /lib查看出现了下面一堆语句
apparmor libnss_mdns4.so.2
brltty libnss_mdns6_minimal.so.2
cpp libnss_mdns6.so.2
dbus-1.0 libnss_mdns_minimal.so.2
firmware libnss_mdns.so.2
hdparm libntfs-3g.so.79
i386-linux-gnu libntfs-3g.so.79.0.0
init libparted.so.0
klibc-YHMcsdavQye9iuNwPByVrU6ZqHQ.so libparted.so.0.0.1
ld-linux.so.2 libpcsclite.so.1
libatasmart.so.4 libpcsclite.so.1.0.0
libatasmart.so.4.0.3 libply-boot-client.so.2
libatm.so.1 libply-boot-client.so.2.0.0
libatm.so.1.0.0 libply.so.2
libbrlapi.so.0.5 libply.so.2.0.0
libbrlapi.so.0.5.5 libply-splash-core.so.2
libbsd.so.0 libply-splash-core.so.2.0.0
libbsd.so.0.2.0 libply-splash-graphics.so.2
libbz2.so.1 libply-splash-graphics.so.2.0.0
libbz2.so.1.0 libpopt.so.0
libbz2.so.1.0.4 libpopt.so.0.0.0
libcap.so.2 libproc-3.2.8.so
libcap.so.2.20 libreadline.so.6
libcrypto.so.0.9.8 libreadline.so.6.2
libdevmapper-event.so.1.02.1 libsepol.so.1
libdevmapper.so.1.02.1 libslang.so.2
libfuse.so.2 libslang.so.2.2.2
libfuse.so.2.8.4 libssl.so.0.9.8
libhistory.so.6 libsysfs.so.2
libhistory.so.6.2 libsysfs.so.2.0.1
libip4tc.so.0 libulockmgr.so.1
libip4tc.so.0.0.0 libulockmgr.so.1.0.1
libip6tc.so.0 libusb-0.1.so.4
libip6tc.so.0.0.0 libusb-0.1.so.4.4.4
libipq_pic.so.0 libusb-1.0.so.0
libipq_pic.so.0.0.0 libusb-1.0.so.0.0.0
libipq.so.0 libwrap.so.0
libipq.so.0.0.0 libwrap.so.0.7.6
libiptc.so.0 libx86.so.1
libiptc.so.0.0.0 libxtables.so.5
libiw.so.30 libxtables.so.5.0.0
liblvm2app.so.2.2 linux-sound-base
libncurses.so.5 lsb
libncurses.so.5.7 modules
libncursesw.so.5 plymouth
libncursesw.so.5.7 security
libnih-dbus.so.1 systemd
libnih-dbus.so.1.0.0 terminfo
libnih.so.1 udev
libnih.so.1.0.0 ufw
libnss_mdns4_minimal.so.2 xtables
但是不知道是哪一个还是根本就没有sin,请高手指点,语句有点长有点烦,谢谢了!
deepwhite 于 2011-07-13 08:43:41发表:
[i=s] 本帖最后由 deepwhite 于 2011-7-13 08:45 编辑 [/i]
一般来说,可以根据 link 使用的 flag 来推断用到的函数在哪个文件中。
比如 -lm , 相应的文件名应该为 libm.so,一般位于 /usr/lib/ 下面,即 /usr/lib/libm.so,比如我的机器上:
/tmp $ readelf -s /usr/lib/libm.so | grep sin
72: 0000000000030b80 466 FUNC WEAK DEFAULT 12 casinhf@@GLIBC_2.2.5
79: 0000000000038540 407 FUNC WEAK DEFAULT 12 casinhl@@GLIBC_2.2.5
113: 00000000000238c0 122 FUNC WEAK DEFAULT 12 asin@@GLIBC_2.2.5
116: 000000000002d960 223 FUNC WEAK DEFAULT 12 sinf@@GLIBC_2.2.5
119: 00000000000247f8 103 FUNC WEAK DEFAULT 12 sinh@@GLIBC_2.2.5
124: 00000000000356d0 67 FUNC WEAK DEFAULT 12 sinl@@GLIBC_2.2.5
132: 00000000000252d0 52 FUNC WEAK DEFAULT 12 sincos@@GLIBC_2.2.5
135: 000000000003018c 282 FUNC WEAK DEFAULT 12 casinf@@GLIBC_2.2.5
138: 0000000000026690 398 FUNC WEAK DEFAULT 12 casinh@@GLIBC_2.2.5
139: 0000000000037b14 262 FUNC WEAK DEFAULT 12 casinl@@GLIBC_2.2.5
194: 000000000002dcb4 119 FUNC WEAK DEFAULT 12 asinf@@GLIBC_2.2.5
195: 00000000000151dc 376 FUNC WEAK DEFAULT 12 asinh@@GLIBC_2.2.5
197: 0000000000035934 118 FUNC WEAK DEFAULT 12 asinl@@GLIBC_2.2.5
201: 000000000002f610 394 FUNC WEAK DEFAULT 12 sincosf@@GLIBC_2.2.5
205: 0000000000037190 46 FUNC WEAK DEFAULT 12 sincosl@@GLIBC_2.2.5
238: 000000000001b545 8034 FUNC WEAK DEFAULT 12 sin@@GLIBC_2.2.5
239: 0000000000025d30 275 FUNC WEAK DEFAULT 12 casin@@GLIBC_2.2.5
241: 0000000000030420 563 FUNC WEAK DEFAULT 12 csinf@@GLIBC_2.2.5
242: 0000000000025580 615 FUNC WEAK DEFAULT 12 csinh@@GLIBC_2.2.5
244: 0000000000037d60 570 FUNC WEAK DEFAULT 12 csinl@@GLIBC_2.2.5
266: 000000000002bee8 347 FUNC WEAK DEFAULT 12 asinhf@@GLIBC_2.2.5
269: 00000000000345e0 269 FUNC WEAK DEFAULT 12 asinhl@@GLIBC_2.2.5
273: 0000000000025fb0 663 FUNC WEAK DEFAULT 12 csin@@GLIBC_2.2.5
274: 000000000002fa60 567 FUNC WEAK DEFAULT 12 csinhf@@GLIBC_2.2.5
276: 0000000000037440 558 FUNC WEAK DEFAULT 12 csinhl@@GLIBC_2.2.5
321: 000000000002ecbc 109 FUNC WEAK DEFAULT 12 sinhf@@GLIBC_2.2.5
325: 0000000000036b50 122 FUNC WEAK DEFAULT 12 sinhl@@GLIBC_2.2.5
从中可以看到 sin 。
又比如 -lpthread, 则相应文件名为 libpthread.so, 以此类推。
jayee 于 2011-07-12 18:56:41发表:
3# deepwhite
追问:谢谢了,但是如何看它具体在什么文件夹里呢?我调用也是根据它这里面的Link with -lm的,但还是不知道它的文件名是什么,具体放在哪里,求教!
deepwhite 于 2011-07-12 16:40:21发表:
[i=s] 本帖最后由 deepwhite 于 2011-7-12 16:43 编辑 [/i]
man 3 sin.
[code]SIN(3) -- 2010-09-11 -- Linux Programmer's Manual
NAME
sin, sinf, sinl - sine function
SYNOPSIS
#include
double sin(double x);
float sinf(float x);
long double sinl(long double x);
Link with -lm.
[/code]
ineosc 于 2011-07-12 09:00:08发表:
不懂这个