与g ++链接时未定义的符号?我该如何解决这个问题?

时间:2011-04-01 16:01:23

标签: c++ g++ makefile

我的make文件:

all: hPif clean

hPif : src/main.o src/fann_utils.o src/hashes.o src/Config.o
    g++ src/Config.o src/main.o src/fann_utils.o src/hashes.o  -lfann -L/usr/local/lib -o hPif

Config.o : src/Config.cpp src/Config.h
    g++ -c src/Config.cpp

hashes.o : src/hashes.cpp src/hashes.h
    g++ -c src/hashes.cpp

fann_utils.o: src/fann_utils.cpp fann_utils.h src/Config.h src/hashes.h
    g++ -c src/fann_utils.cpp 

main.o: src/main.cpp src/Config.h src/main.h src/hashes.h
    g++ -c src/main.cpp

clean: 
    rm -rf src/*o
    rm -rf *o

我得到的错误,在make:

g++ src/Config.o src/main.o src/fann_utils.o src/hashes.o  -lfann -L/usr/local/lib -o hPif
Undefined symbols:
  "Config::NO_FILE_TRAIN", referenced from:
      _main in main.o
      _main in main.o
  "Config::LEARNING_RATE", referenced from:
      display_help()     in main.o
      train_network_no_file()     in main.o
      train_network()     in main.o
      _main in main.o
.
.
.

此处代码布局的详细信息:C++: I have this config class that I want to use between all my CPP files, how do I initialize it?

编辑:

此处存在问题的代码:http://pastebin.com/PDmHaDaC

2 个答案:

答案 0 :(得分:2)

我引用您accepted answer中的the other question,其中静态变量已正确定义:

来源(Config.cpp):

#include "Config.h"

int Config::OUTPUT_TO_FILE = 0;
int Config::NEED_TO_TRAIN = 0;
int Config::NO_FILE_TRAIN = 0;
int Config::NEED_TO_TEST = 0;

请注意Config::对变量的限定。

将其与您的粘贴bin页面进行比较:http://pastebin.com/PDmHaDaC

答案 1 :(得分:0)

您刚刚从其他问题中学习了如何处理这些静态成员变量的理论。而不是立即尝试将它们挂钩到一个大的代码库中,尝试让它们在一个小的代码库中工作;写一个使用它们的helloWorld,只需定义这些变量的main.cpp,修改它们并打印出来。一旦工作正常,您可以将定义移到Config.cpp,一旦 工作,您就可以将这些变量集成到您的项目中。

修改:
这是麻烦:

int NO_FILE_TRAIN = false;

应该是

int Config::NO_FILE_TRAIN = false;