У меня проблема с попыткой использовать autotools для простого надуманного проекта, задача проста, используйте Objective-C на Mac OSX и C++ на Windows (mingw) - с некоторым клеем C
середина.Компиляция на Windows и Mac с помощью Autotool
Проект построен как так (минус все автоматически сгенерированные файлы):
./aclocal.m4
./configure
./configure.ac
./Makefile.am
./src/darwin/greet.m
./src/greet.h
./src/main.cpp
./src/Makefile.am
./src/mingw32/greet.cpp
Содержание ключевых файлов здесь на github in a gist. (Не хотел спам здесь)
Я использую следующую команду между изменениями:
$ autoreconf -vis && ./configure && make
Ошибка я получаю на полную мощность (here in another gist):
....
Making all in src
g++ -g -O2 -o greetings main.o
Undefined symbols:
"greet()", referenced from:
_main in main.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make[1]: *** [greetings] Error 1
make: *** [all-recursive] Error 1
I «Я очень новичок в autotools, и прошел долгий путь с помощью пары хороших людей в IRC, но я думаю, что я делаю концептуальную ошибку здесь, на самом деле надеюсь, что есть простая ошибка, которую я делаю.
Было моим пониманием из документов, что EXTRA_progname_SOURCES
должно содержать все возможные файлы и что условные обозначения, которые устанавливаются, должны работать, чтобы выбрать правильные.
Тревожно, я не думаю, что мои make-файлы переделываются, потому что даже когда я меняю строку в src/Makefile.am
, чтобы включить источники явно для моей платформы (это Max OS X Darwin, большую часть времени) - выход остается совершенно одинаковым.
Это ошибка компоновщика. Forger об автотестах, просто попытайтесь понять, почему функция greet не найдена. Где это должно быть - в каком-то другом файле .c/.cpp или в некоторых лирических? –
Alex, функция определена в заголовке 'src/greet.h' с реализацией на платформе (чтение: использует Objective-C, другие C++) в' src/darwin/greet.mm', а другое в 'src/mingw31/greet.cpp' –
Если я переработаю свою команду как '$ autoreconf -vis && ./configure && make clean && make' (обратите внимание на добавление make clean) - тогда я вижу гораздо более интересную ошибку:' g ++ -DPACKAGE_NAME = \ "приветствия \" -DPACKAGE_TARNAME = \ "приветствия \" -DPACKAGE_VERSION = \ "1.0 \" -DPACKAGE_STRING = \ "приветствия \ 1.0 \" -DPACKAGE_BUGREPORT = \ "[email protected] \" -DPACKAGE_URL = \ "\" -DPACKAGE = \ "greetings \" -DVERSION = \ "1.0 \" -I. -g -O2 -MT main.o -MD -MP -MF $ depbase.Tpo -c -o main.o main.cpp && mv -f $ depbase.Tpo $ depbase.Po' (https: //gist.github .com/f5ef9704267c7284c853) –