【问题标题】:Undefined symbols when linking with g++? How do I solve this?与g ++链接时未定义的符号?我该如何解决这个问题?
【发布时间】:2011-04-01 16:01:22
【问题描述】:

我的制作文件:

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

我得到的错误,在制作时:

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

【问题讨论】:

  • 顺序与 gcc 链接相关选项有关。例如,请参阅 stackoverflow.com/q/1095298/2509stackoverflow.com/q/2632505/2509
  • 另外,就调试make而言,您可以随时在命令行上尝试有问题​​的命令,看看是make还是您的命令导致了问题。
  • @dmckee,我不明白,我的订单有什么问题?
  • 嗯,对我有用。我做了一个小规模的实验,Config.o 和 main.o 的顺序在链接线上并不重要。
  • @quamrana,我会发布一个变量使用的链接。

标签: c++ g++ makefile


【解决方案1】:

我将您推荐给the other question 中的accepted answer,其中正确定义了静态变量:

来源(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:: 限定条件。

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

【讨论】:

    【解决方案2】:

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

    编辑:
    问题来了:

    int NO_FILE_TRAIN = false;
    

    应该是

    int Config::NO_FILE_TRAIN = false;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-21
      • 2020-03-25
      • 2020-02-14
      • 2013-05-16
      相关资源
      最近更新 更多