不能使用g ++进行编译 [英] Cannot use g++ for compiling
问题描述
现在我尝试使用名为 GAUL 的开源工具,其中实现了一些遗传算法。通过编译示例文件我发现,我只能通过使用gcc而不是g ++编译这些数据。例如:
right now I try to use a opensource tool called "GAUL" where some genetic algorithms are implemented. By compiling the example files I figured out that I can only compile these data via using gcc but not g++. E.x.:
1)使用 gcc -I / usr / local / include / -c wildfire_threat .c -o test.o
gcc ** -g -O2 -Wall -o test2.out test .o -lgaul -lgaul_util -lm -lpthread -lslang -lm
也适用于组合
gcc-I / usr / local / include / -c wildfire_threat.c -o test.o
g ++ -g -O2 -Wall -o test2.out test.o -lgaul -lgaul_util -lm -lpthread -lslang -lm
但是2)使用
g ++ -I / usr / local / include / -c wildfire_threat.c -o test.o
g ++ -g -O2 - o test2.out test.o -lgaul -lgaul_util -lm -lpthread -lslang -lm
我收到以下错误消息:
test.o: In function `wildfire_simulation(int*, bool)':
wildfire_threat.c:(.text+0x52): undefined reference to `random_int(unsigned int)'
wildfire_threat.c:(.text+0x74): undefined reference to `random_int(unsigned int)'
test.o: In function `wildfire_score(population_t*, entity_t*)':
wildfire_threat.c:(.text+0xb55): undefined reference to `ga_entity_set_fitness(entity_t*, double)'
test.o: In function `wildfire_seed(population_t*, entity_t*)':
wildfire_threat.c:(.text+0xb86): undefined reference to `random_boolean()'
wildfire_threat.c:(.text+0xbb9): undefined reference to `random_boolean_prob(double)'
wildfire_threat.c:(.text+0xc18): undefined reference to `random_int(unsigned int)'
wildfire_threat.c:(.text+0xc25): undefined reference to `random_int(unsigned int)'
wildfire_threat.c:(.text+0xc92): undefined reference to `random_int(unsigned int)'
test.o: In function `wildfire_mutate_flip(population_t*, entity_t*, entity_t*)':
wildfire_threat.c:(.text+0xd41): undefined reference to `random_int(unsigned int)'
test.o: In function `wildfire_crossover(population_t*, entity_t*, entity_t*, entity_t*, entity_t*)':
wildfire_threat.c:(.text+0xe25): undefined reference to `random_boolean()'
wildfire_threat.c:(.text+0xe37): undefined reference to `random_int(unsigned int)'
wildfire_threat.c:(.text+0xff0): undefined reference to `random_int(unsigned int)'
test.o: In function `wildfire_ga_callback(int, population_t*)':
wildfire_threat.c:(.text+0x11bc): undefined reference to `ga_get_entity_from_rank(population_t*, unsigned int)'
wildfire_threat.c:(.text+0x11c4): undefined reference to `ga_entity_get_fitness(entity_t*)'
wildfire_threat.c:(.text+0x11ef): undefined reference to
`ga_population_score_and_sort(population_t*)'
wildfire_threat.c:(.text+0x1206): undefined reference to `ga_fitness_mean_stddev(population_t*, double*, double*)'
wildfire_threat.c:(.text+0x122b): undefined reference to `ga_get_entity_from_rank(population_t*, unsigned int)'
wildfire_threat.c:(.text+0x1233): undefined reference to `ga_entity_get_fitness(entity_t*)'
wildfire_threat.c:(.text+0x1268): undefined reference to `ga_get_entity_from_rank(population_t*, unsigned int)'
wildfire_threat.c:(.text+0x1270): undefined reference to `ga_entity_get_fitness(entity_t*)'
test.o: In function `main':
wildfire_threat.c:(.text+0x12b0): undefined reference to `random_seed(unsigned int)'
wildfire_threat.c:(.text+0x12dd): undefined reference to `ga_select_two_roulette_rebased(population_t*, entity_t**, entity_t**)'
wildfire_threat.c:(.text+0x12e6): undefined reference to `ga_select_one_roulette_rebased(population_t*, entity_t**)'
wildfire_threat.c:(.text+0x132e): undefined reference to `ga_genesis_integer(int, int, int, bool (*)(int, population_t*), bool (*)(int, entity_t*), void (*)(void*), void (*)(void*), bool (*)(population_t*, entity_t*), bool (*)(population_t*, entity_t*), entity_t* (*)(population_t*, entity_t*), bool (*)(population_t*, entity_t**), bool (*)(population_t*, entity_t**, entity_t**), void (*)(population_t*, entity_t*, entity_t*), void (*)(population_t*, entity_t*, entity_t*, entity_t*, entity_t*), void (*)(population_t*, entity_t*), void*)'
wildfire_threat.c:(.text+0x135c): undefined reference to `ga_population_set_parameters(population_t*, ga_scheme_type_t, ga_elitism_type_t, double, double, double)'
wildfire_threat.c:(.text+0x136d): undefined reference to `ga_evolution_threaded(population_t*, int)'
wildfire_threat.c:(.text+0x137e): undefined reference to `ga_get_entity_from_rank(population_t*, unsigned int)'
wildfire_threat.c:(.text+0x1386): undefined reference to `ga_entity_get_fitness(entity_t*)'
wildfire_threat.c:(.text+0x13b5): undefined reference to `ga_get_entity_from_rank(population_t*, unsigned int)'
wildfire_threat.c:(.text+0x1434): undefined reference to `ga_get_entity_from_rank(population_t*, unsigned int)'
wildfire_threat.c:(.text+0x1528): undefined reference to `ga_extinction(population_t*)'
collect2: ld returned 1 exit status
$ b b
任何人都可以向我解释这个秘密,以及如何避免使用gcc,因为这会带来我想嵌入的剩余源代码的问题。
Can anyone explain this to me mystery and how I can avoid to use gcc since this brings problems with remaining source code which I want to embed?
推荐答案
您的第三方C库可能在其标题中缺少 externC
声明。要解决这个问题而不修改第三方标头,您可以在C ++源代码中的 #include
相关第三方标题中执行类似的操作:
Your third party C library probably lacks extern "C"
declarations in its headers. To work around this without modifying the third party headers you can do something like this in your C++ source wherever you #include
the relevant third party headers:
extern "C" {
#include "gaul.h" // note: I'm just guessing the names of the
#include "gaul_utils.h" // actual header files here...
}
这篇关于不能使用g ++进行编译的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!