编译过时的c ++包:未定义的引用错误

时间:2011-04-13 17:34:16

标签: c++ g++ linker-errors

我正在尝试使用g ++ 4.4.5在Ubuntu中编译一个名为SNoW的系统。该软件似乎最后一次更新为g ++ 3.1.4,因为我发现其中一个文件中有一个切换检查它,最高的情况是3.1.4 +。

我不得不更新一些标头以获取编译器错误... cstring而不是字符串和类似的东西。现在我停留在未定义的引用错误上,其中未定义的引用是提供的头中的函数。

错误是这样的:

Main.o: In function `ShowUsage(char const*)':
Main.cpp:(.text+0x140e): undefined reference to `Fex::logo'

...来自Main.cpp:

cerr << Fex::logo[0] << endl;

其中Fex.h包含在Main.cpp的顶部,而Fex.h中Fex类的 public 成员之一是:

static const char * logo[];  

Main.o的Makefile因此是:

fex : Main.o 
    $(CC) -O2 -o fex Main.o $(LINKFLAGS)

Main.o : Main.cpp FexGlobalParams.h Fex.h libfex.a
    $(CC) $(CCFLAGS) -o Main.o Main.cpp

我已经尝试将CC设置为repos(4.3)中最早版本的g ++,并重新排序Makefile中的标题但没有成功,并且我不确定此时该做什么。我找不到g ++ 3.1的现存副本,并且软件创建者非常确信它是在上次使用它时在Linux下编译的。

有没有人发现可能出错的地方,或者有什么建议可以尝试?

1 个答案:

答案 0 :(得分:3)

虽然静态成员的声明可能在Fex.h标题中,但是某个成员需要有一个定义(通常它位于Fex.cpp文件):

const char * Fex::logo[ /* you'll need some size here, too */ ];  

我似乎记得GCC会自动为这些“幽灵”静态成员制定定义 - 也许他们已经改变了(或添加了编译器选项)? - 我在想GCC assuming that statically allocated arrays without a specified size would default to one element,但那只是C。