Я немного новичок в том, что касается ошибок компиляции / компоновки.
Я работаю с большим кодом C ++ (есть также несколько файлов C). Я успешно запустил его на Mac, скомпилированный с g ++. Теперь мне нужно запустить его в кластере на базе Linux, потому что он слишком медленный на моем Mac. Код состоит из нескольких библиотек, которые мне нужно скомпилировать, а также моего собственного кода, который использует эти библиотеки.
Я могу скомпилировать весь код кластера с помощью компилятора g ++ по умолчанию. Однако, к сожалению, я обнаружил, что мне нужно скомпилировать с помощью gcc / 4.7.2, чтобы код работал с другим программным обеспечением в кластере. Я работал над ошибками компиляции и компоновки. До сих пор все они были связаны с проблемами C ++ по сравнению с C. Например, мне пришлось добавить «extern» в некоторые файлы C. Мне пришлось изменить заголовки с C ++ на C.
Моя проблема, похоже, связана с одной конкретной библиотекой (я успешно справился со всеми остальными). Он компилируется в своем каталоге. Но когда я перехожу в свой рабочий каталог, я получаю всевозможные ошибки, которые кажутся связанными с кодом, составляющим эту библиотеку проблем. Я предполагаю, что они в основном связаны с отсутствием стандартных библиотек. Я просто не понимаю, в чем проблема с моими включениями, и был бы очень признателен, если бы кто-нибудь мог взглянуть на то, что у меня есть в моем make-файле для этой библиотеки. Эта библиотека официально основана на "C ++", но, похоже, в ее файлах содержится много кода в стиле C.
Слишком много ошибок (страниц) и слишком много кода для публикации всего. Я надеюсь, что того, что я опубликовал, достаточно, и я могу дополнить его, если это поможет. Я не могу точно определить, откуда они берутся в моем коде, потому что они очень загадочные; Например:
Code.cpp :(. Text + 0x35): неопределенная ссылка на `std :: cout '
Параметры моего make-файла и компилятора приведены ниже. Первоначально я создал это на своем Mac с помощью QT. Я модифицировал его для работы с кластером Linux на gcc / 4.7.2. Так что вполне возможно, что это немного беспорядок.
Сначала я делаю (командная строка в терминале):
загрузка модуля gcc / 4.7.2
Тогда make-файл:
CC = gcc
DEFINES = -DIPMGEMPLUGIN -DNOPARTICLEARRAY -D__unix
CFLAGS = -c -g -O2 -pedantic -fno-nonansi-builtins -D__unix -m64
CXXFLAGS = -pipe -O2 -Wall -W -fPIC $ (DEFINES) -lstdc ++ -m64
INCPATH = -I. \
-I/mounts/apps/gcc/4.7.2/ \ -I/mounts/apps/gcc/4.7.2/bin/ \ -I/mounts/apps/gcc/4.7.2/bin/x86_64-unknown-linux-gnu/4.7.2 \ -I/mounts/apps/gcc/4.7.2/lib64 \ -I/mounts/apps/gcc/4.7.2/bin/include \ -I/mounts/apps/gcc/4.7.2/bin/include/c++ \ -I/mounts/apps/gcc/4.7.2/4.7.2/bin/include/c++/4.7.2 \
AR = ar cq RANLIB = ranlib -s TARGET = mylib.a
. СУФФИКСЫ: .o .c .cpp .cc .cxx .C
.cpp.o: $ (CC) -c $ (CXXFLAGS) $ (INCPATH) -o "$ @" "$‹ "
.cc.o: $ (CC) -c $ (CXXFLAGS) $ (INCPATH) -o "$ @" "$‹ "
.cxx.o: $ (CC) -c $ (CXXFLAGS) $ (INCPATH) -o "$ @" "$‹ "
.C.o: $ (CC) -c $ (CXXFLAGS) $ (INCPATH) -o "$ @" "$‹ "
.c.o: $ (CC) -c $ (CFLAGS) $ (INCPATH) -o "$ @" "$‹ "
Теперь о типах ошибок, которые я получаю:
Code.o: в функции
_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.part.8': Code.cpp:(.text+0x12): undefined reference to
std :: basic_ios> :: clear (std :: _ Ios_Iostate) 'Code.o: в функции_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.constprop.101': Code.cpp:(.text+0x35): undefined reference to
std :: cout' Code.cpp :(. Text + 0x3a): неопределенная ссылка на `std :: basic_ostream> & std :: __ ostream_insert(std :: basic_ostream> &, char const *, long) 'Code.cpp :(. text + 0x3f): неопределенная ссылка на
std::cout' Code.cpp:(.text+0x49): undefined reference to
std :: cout' Code.cpp :(. text + 0x53): неопределенная ссылка наstd::cout' Code.o: In function
_ZNSt14basic_ofstreamIcSt11char_traitsIcEE4openEPKcpen13_Ios. constprop.99 ': Code.cpp :(. text + 0x93): неопределенная ссылка наstd::basic_filebuf<char, std::char_traits<char> >::open(char const*, std::_Ios_Openmode)' Code.o: In function
_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode.constprop.96': Code.cpp :(. text + 0x103): неопределенная таблица дляstd::ios_base::ios_base()' Code.cpp:(.text+0x10b): undefined reference to
v :(. text + 0x11b): undefined ссылка наVTT for std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >' Code.cpp:(.text+0x15d): undefined reference to
std :: basic_iostream> :: basic_iostream () 'Code.cpp :(. text + 0x16c): undefined ссылка наvtable for std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >' Code.cpp:(.text+0x174): undefined reference to
vtable для std :: basic_stringstream, std :: allocator>' Код .cpp :(. text + 0x17c): неопределенная ссылка наvtable for std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >' Code.cpp:(.text+0x184): undefined reference to
vtable для std :: basic_streambuf> '
И далее:
gl3.cpp :(. text + 0x18d): неопределенная ссылка на `operator new [] (unsigned long) '
gl3.cpp :(. text + 0x1a1): неопределенная ссылка на `operator new [] (unsigned long) '
gl3.cpp :(. text + 0x1b5): неопределенная ссылка на `operator new [] (unsigned long) '
gl3.cpp :(. text + 0x1c9): неопределенная ссылка на `operator new [] (unsigned long) '
gl3.cpp :(. text + 0x1dd): неопределенная ссылка на `operator new [] (unsigned long) '
/data/place/number/account/CodeDirectory/../ProblemLibraryDirectory/libProblem.a(gl3.o): В функции
Other::free_internal()': gl3.cpp:(.text+0x251): undefined reference to
operator удалите 'gl3.cpp :(. text + 0x262): ...
Это что-нибудь значит для кого-нибудь?