Связывание с GHC

Я следую этому краткому руководству.

и пытаемся скомпилировать приложение Webots (написанное на C) с помощью GHC (компилятор Glasgow Haskell, версия 7.10.1) с помощью следующей команды:

ghc --make -no-hs-main -optc-O 
-I"/Applications/Webots/include/controller/c/" 
-L"/Applications/Webots/lib/" 
-outputdir build/release/ 
advanced_genetic_algorithm_supervisor.c 
Safe 
-o advanced_genetic_algorithm_supervisor

и получая следующую ошибку на этапе связывания:

Linking advanced_genetic_algorithm_supervisor ...
Undefined symbols for architecture x86_64:
  "_wb_display_draw_text", referenced from:
      _main in advanced_genetic_algorithm_supervisor.o
  "_wb_display_get_height", referenced from:
      _main in advanced_genetic_algorithm_supervisor.o
  "_wb_display_get_width", referenced from:
      _main in advanced_genetic_algorithm_supervisor.o
  "_wb_emitter_send", referenced from:
      _evaluate_genotype in advanced_genetic_algorithm_supervisor.o
  "_wb_receiver_enable", referenced from:
      _main in advanced_genetic_algorithm_supervisor.o
  "_wb_receiver_get_data", referenced from:
      _check_for_slaves_data in advanced_genetic_algorithm_supervisor.o
  "_wb_receiver_get_queue_length", referenced from:
      _check_for_slaves_data in advanced_genetic_algorithm_supervisor.o
  "_wb_receiver_next_packet", referenced from:
      _check_for_slaves_data in advanced_genetic_algorithm_supervisor.o
  "_wb_robot_cleanup", referenced from:
      _run_optimization in advanced_genetic_algorithm_supervisor.o
  "_wb_robot_get_basic_time_step", referenced from:
      _main in advanced_genetic_algorithm_supervisor.o
  "_wb_robot_get_device", referenced from:
      _main in advanced_genetic_algorithm_supervisor.o
  "_wb_robot_init", referenced from:
      _main in advanced_genetic_algorithm_supervisor.o
  "_wb_robot_step", referenced from:
      _run_seconds in advanced_genetic_algorithm_supervisor.o
      _evaluate_genotype in advanced_genetic_algorithm_supervisor.o
  "_wb_supervisor_field_get_sf_rotation", referenced from:
      _main in advanced_genetic_algorithm_supervisor.o
  "_wb_supervisor_field_get_sf_vec3f", referenced from:
      _main in advanced_genetic_algorithm_supervisor.o
  "_wb_supervisor_field_set_sf_rotation", referenced from:
      _evaluate_genotype in advanced_genetic_algorithm_supervisor.o
  "_wb_supervisor_field_set_sf_vec3f", referenced from:
      _evaluate_genotype in advanced_genetic_algorithm_supervisor.o
  "_wb_supervisor_node_get_field", referenced from:
      _main in advanced_genetic_algorithm_supervisor.o
  "_wb_supervisor_node_get_from_def", referenced from:
      _main in advanced_genetic_algorithm_supervisor.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Я полагаю, что это означает, что компилятор не может найти функции («символы»), хотя ему удалось пройти процесс компиляции, проанализировав все включения, указанные в программе, используя -I путь


person Boris Mocialov    schedule 27.05.2015    source источник


Ответы (1)


Это означает, что компоновщик не может найти эти функции/символы, потому что вы не сказали ему связываться с библиотекой Webots.

Вам нужно добавить -lsomething, предполагая, что имя файла библиотеки /Applications/Webots/lib/libsomething.dylib (или libsomething.a).

person Reid Barton    schedule 27.05.2015
comment
Действительно, -lController должен быть связан с libController.dylib, содержащимся в пути /Applications/Webots/lib/. - person FabienRohrer; 28.05.2015