gpt4 book ai didi

c - 使用 FANN 的链接错误

转载 作者:行者123 更新时间:2023-11-30 15:44:54 25 4
gpt4 key购买 nike

我正在尝试使用 MinGW 在 Windows 上构建一个基本的 FANN(快速人工神经网络)项目。然而,每当我尝试链接可执行文件时,我都会遇到一堆 undefined reference 错误。有趣的是,如果我根本不链接该库,我会收到更多错误,这意味着该库至少有一部分正在工作。我尝试编译和链接的文件的代码是:

#include "doublefann.h"

int main() {
const unsigned int num_input_neurons = 9;
const unsigned int num_output_neurons = 1;
const unsigned int num_layers = 3;
const unsigned int num_hidden_neurons = 9;
const float desired_error = (const float) 0;
const unsigned int max_epochs = 500000;
const unsigned int epochs_between_reports = 1000;

struct fann *ann = fann_create_standard(num_layers,
num_input_neurons,
num_hidden_neurons,
num_output_neurons);

fann_set_activation_function_hidden(ann, FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output(ann, FANN_SIGMOID_SYMMETRIC);

fann_train_on_file(ann,
"titanic-training.data",
max_epochs,
epochs_between_reports,
desired_error);

fann_save(ann, "titanic.net");

fann_destroy(ann);

return 0;
}

我用来编译和链接的命令是:

gcc -Wall -Ifann\src\include titanic-train.c -Lfann\bin -lfanndouble -o titanic-train.exe

我返回的错误是:

C:\Users\kunkelwe\AppData\Local\Temp\ccsWQg66.o:titanic-train.c:(.text+0x7f): undefined reference to `fann_set_activation_function_hidden'           
C:\Users\kunkelwe\AppData\Local\Temp\ccsWQg66.o:titanic-train.c:(.text+0x93): undefined reference to `fann_set_activation_function_output'
C:\Users\kunkelwe\AppData\Local\Temp\ccsWQg66.o:titanic-train.c:(.text+0xbf): undefined reference to `fann_train_on_file'
C:\Users\kunkelwe\AppData\Local\Temp\ccsWQg66.o:titanic-train.c:(.text+0xd3): undefined reference to `fann_save'
C:\Users\kunkelwe\AppData\Local\Temp\ccsWQg66.o:titanic-train.c:(.text+0xdf): undefined reference to `fann_destroy'
c:/fragileprograms/mingw-native/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: C:\Users\kunkelwe\AppData\Local\Temp\ccsWQg66.o: bad reloc address 0x64 in section `.rdata'
c:/fragileprograms/mingw-native/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status

如果我根本不链接库,我会得到:

C:\Users\kunkelwe\AppData\Local\Temp\ccyOO3jL.o:titanic-train.c:(.text+0x67): undefined reference to `fann_create_standard'
C:\Users\kunkelwe\AppData\Local\Temp\ccsWQg66.o:titanic-train.c:(.text+0x7f): undefined reference to `fann_set_activation_function_hidden'
C:\Users\kunkelwe\AppData\Local\Temp\ccsWQg66.o:titanic-train.c:(.text+0x93): undefined reference to `fann_set_activation_function_output'
C:\Users\kunkelwe\AppData\Local\Temp\ccsWQg66.o:titanic-train.c:(.text+0xbf): undefined reference to `fann_train_on_file'
C:\Users\kunkelwe\AppData\Local\Temp\ccsWQg66.o:titanic-train.c:(.text+0xd3): undefined reference to `fann_save'
C:\Users\kunkelwe\AppData\Local\Temp\ccsWQg66.o:titanic-train.c:(.text+0xdf): undefined reference to `fann_destroy'
c:/fragileprograms/mingw-native/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: C:\Users\kunkelwe\AppData\Local\Temp\ccsWQg66.o: bad reloc address 0x64 in section `.rdata'
c:/fragileprograms/mingw-native/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status

编辑:

根据 Haroogan 的要求,我运行了 nm fanndouble.lib。输出相当广泛,因此我没有将其全部粘贴到此处,而是通过此处的 Pastebin 提供了它:http://pastebin.com/raw.php?i=vybFhEcX

我不熟悉 nm,但文件中似乎确实存在缺失的符号。

编辑#2:

doublefann.h的内容为:http://pastebin.com/mrHKJi8C

以及 fann.h 的内容,其中包括:http://pastebin.com/gTrHCYAg

用MinGW重新编译库可以解决这个问题吗?

编辑#3:

哈罗根建议的改变奏效了!除了这些更改之外,我还必须通过添加以下内容来修改 FANN 的 CMakeLists.txt 文件:

if (WIN32)
ADD_DEFINITIONS(-DFANN_DLL_EXPORTS)
endif (WIN32)

然后,在项目根目录中运行 cmake -G "MinGW Makefiles"mingw32-make 生成一个文件 libdoublefann.dll,当链接到该文件时并包含在 .exe 目录中,终于允许我运行我的程序。

最佳答案

doublefann.h中的第#116行:

#if (_MSC_VER > 1300)

更改为:

#if (_MSC_VER > 1300) || defined(__MINGW32__) || defined(__MINGW64__)

此外,第 121 行:

#if defined(_MSC_VER) && (defined(FANN_USE_DLL) || defined(FANN_DLL_EXPORTS))

更改为:

#if (defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__)) && \
(defined(FANN_USE_DLL) || defined(FANN_DLL_EXPORTS))

关于c - 使用 FANN 的链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19286450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com