我已下载并编译:http://leenissen.dk/fann/wp/
用于编译的命令:
cmake -D CMAKE_INSTALL_PREFIX:PATH=/usr .
安装:
sudo make && sudo make install
然后我转到fann项目中的examples /目录并尝试通过运行编译示例:
make all
我收到了一个错误:
gcc -O3 xor_train.c -o xor_train -lfann -lm
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `sin'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `exp'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `cos'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `log'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `pow'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `sqrt'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `floor'
collect2: error: ld returned 1 exit status
make: *** [xor_train] Error 1
更新
有关共享库依赖项的更多信息:
ldd /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so
linux-vdso.so.1 => (0x00007fff3abfe000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6f3997c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6f39f84000)
正如使用-Wl编译的@ michael-burr所建议的那样,-v
/usr/bin/ld --sysroot=/ \
--build-id --eh-frame-hdr -m elf_x86_64 \
--hash-style=gnu --as-needed \
-dynamic-linker /lib64/ld-linux-x86-64.so.2 \
-z relro -o xor_train \
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o \
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crti.o \
/usr/lib/gcc/x86_64-linux-gnu/4.8/crtbegin.o \
-L/usr/lib/gcc/x86_64-linux-gnu/4.8 \
-L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu \
-L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib \
-L/lib/x86_64-linux-gnu \
-L/lib/../lib -L/usr/lib/x86_64-linux-gnu \
-L/usr/lib/../lib \
-L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../.. \
-v /tmp/cc0AHZgU.o -lfann -lm -lgcc --as-needed -lgcc_s --no-as-needed \
-lc -lgcc --as-needed -lgcc_s --no-as-needed \
/usr/lib/gcc/x86_64-linux-gnu/4.8/crtend.o \
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crtn.o
GNU ld (GNU Binutils for Ubuntu) 2.23.52.20130913
答案 0 :(得分:5)
根本原因:FANN库中缺少依赖项(将向作者发送补丁)。这种依赖性称为“inter library dependency”。
可能会发生构建共享库 A 并且没有设置正确的依赖关系(假设 B )。 在这种情况下,将构建共享库 A 而不会出现任何错误消息,因为在编译期间不需要提供实现。
当尝试创建依赖于 A 的可执行文件时,问题将显示为缺少库 B 。
在这种特定情况下,解决方案是根据CMake manual
修改CMake配置文件示例更改行:
TARGET_LINK_LIBRARIES(fann m)
答案 1 :(得分:0)
看起来您正在将自己的程序编译为64位,但FANN库是32位的。您可能需要在编译时为FANN指定体系结构,这可能意味着修改makefile中的GCC标志,除非有autoconf设置为您执行此操作。假设你想要64位FANN。
或者,您可以在编译自己的代码时指定32位体系结构。