gcc 4.8 на MAC OS X 10.8 throws "Неопределенные символы для архитектуры x86_64:"
все, я пишу код, подобный этому в моем mac os x 10.8, и когда я использую "gcc use_new.cpp -o use_new" для его компиляции, но он вызывает неправильное сообщение:
Undefined symbols for architecture x86_64:
"std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))", referenced from:
_main in ccr2vrRQ.o
"std::basic_ostream<char, std::char_traits<char> >::operator<<(void const*)", referenced from:
_main in ccr2vrRQ.o
"std::basic_ostream<char, std::char_traits<char> >::operator<<(double)", referenced from:
_main in ccr2vrRQ.o
"std::basic_ostream<char, std::char_traits<char> >::operator<<(int)", referenced from:
_main in ccr2vrRQ.o
"std::basic_ostream<char, std::char_traits<char> >::operator<<(unsigned long)", referenced from:
_main in ccr2vrRQ.o
"std::ios_base::Init::Init()", referenced from:
__static_initialization_and_destruction_0(int, int) in ccr2vrRQ.o
"std::ios_base::Init::~Init()", referenced from:
__static_initialization_and_destruction_0(int, int) in ccr2vrRQ.o
"std::cout", referenced from:
_main in ccr2vrRQ.o
"std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)", referenced from:
_main in ccr2vrRQ.o
"std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from:
_main in ccr2vrRQ.o
"operator delete(void*)", referenced from:
_main in ccr2vrRQ.o
"operator new(unsigned long)", referenced from:
_main in ccr2vrRQ.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
и когда я использую "g++ use_new.cpp -o use_new" в порядке, кто может мне помочь !? Спасибо!
#include <iostream>
struct fish
{
float weight;
int id;
int kind;
};
int main()
{
using namespace std;
int* pt = new int;
*pt = 1001;
cout<<"int: "<<*pt<<"in location: "<<pt<<endl;
double* pd = new double;
*pd = 100000001.0;
cout<<"double: "<<*pd<<"in location: "<<pd<<endl;
cout<<"int point pt is length "<<sizeof(*pt)<<endl;
cout<<"double point pd is length "<<sizeof(*pd)<<endl;
delete pt;
delete pd;
cout<<(int *)"How are you!"<<endl;
return 0;
}
Ответы
Ответ 1
Это имеет место даже со старым 4.2 GCC (я испытал это, когда установил свою неофициальную инструментальную цепочку iOS). gcc
принимает C по умолчанию и вызывает компоновщик без ссылки на стандартную библиотеку C++; напротив, g++
предполагает C++ и ссылки на стандартную библиотеку C++ по умолчанию.
В целом - возможные решения:
gcc myprog.c -o myprog -lstdc++
или
g++ myprog.c -o myprog
Ответ 2
Ответ на этот вопрос stackoverflow имеет ответ
gcc и g++ компоновщик
использование
gcc -lstdc++ use_new.cpp -o use_new
-lstdC++
указывает компоновщику включить стандартную библиотеку C++
http://en.wikipedia.org/wiki/C%2B%2B_Standard_Library
Я запускаю Mac OS X 10.7.4, и библиотека находится здесь
/usr/lib/libstdc++.dylib
Ответ 3
Это не связано с кодом, вставленным @user1582840, всего за 2 цента, и из-за другой причины той же проблемы в g++ при работе над некоторым из моего собственного кода:
Я получил ошибку "ld: symbol (s) not found for architecture x86_64" при использовании g++ 4.2.1 на OS X 10.8/Darwin11 по другой причине. Надеюсь, это поможет вам найти причину проблемы.
Я получил эту ошибку, потому что у меня был определенный класс, в определении класса я объявлял функции-члены. Однако, когда я определил функции-члены, я забыл включить модификатор класса.
Итак, для примера того, о чем я говорю (образец кода, а не полная программа):
class NewClass
{
NewClass(); // default constructor
};
то позже при определении конструктора NewClass() (или любой функции-члена) я просто имел:
// don't do this, it will throw that error!!
NewClass()
{
// do whatever
}
скорее, чем:
// proper way
NewClass::NewClass()
{
// do whatever
}
Это довольно простая ошибка, и я сумел поймать ее за короткое время, к счастью, но было бы легко пропустить кого-то (особенно мы новичков), а также решения о компоновщиках gcc/g++, XCode и т.д. не помогают: P
Опять же, надеюсь, что это поможет!