2012-06-05 42 views
45

Tôi viết mã này để đọc 3 tệp, TM là kích thước của ma trận vuông, LER số hàng của mảng và từ giá trị cuối cùng xác định ma trận không vuông (ler/2) * 2undefined tham chiếu đến `std :: ios_base :: Init :: Init() '

Sau đó ... mã đọc tệp có một số quan hệ, tất cả đều là số và được gán cho C [ler].

Sau đó ... C [ler] được gán cho B [ler/2] [2].

Tọa độ, mỗi hàng, trong B [ler/2] [2] được gán cho a và b.

a và b là các hàng và cột của ma trận A [tm] [tm] nơi để thêm 1.

treo Mã của tôi và tôi không thấy gì lỗi là.

Khi tôi cố gắng biên dịch nó, trình biên dịch gcc -g -o MatSim MatSim.cpp nhắc:

/usr/include/c++/4.6/iostream:75: undefined reference to `std::ios_base::Init::Init()' 
/usr/include/c++/4.6/iostream:75: undefined reference to `std::ios_base::Init::~Init()' 
collect2: ld returned 1 exit status 

Ngoài ra, khi tôi cố gắng để biên dịch nó, trình biên dịch f77 -o MatSim MatSim cpp nhắc:

/tmp/cc6ewlkf.o: In function `__static_initialization_and_destruction_0(int, int)': 
MatSim.cpp:(.text+0x17ad4a): undefined reference to `std::ios_base::Init::Init()' 
MatSim.cpp:(.text+0x17ad4f): undefined reference to `std::ios_base::Init::~Init()' 
collect2: ld returned 1 exit status 

giải pháp

Vấn đề chính là sự cố thư viện, Biên dịch mã của bạn bằng cách sử dụng:

g++ -g -o MatSim MatSim.cpp -lstdc 

Vẫn không hoạt động? Cài đặt thư viện:

sudo apt-get install g++-multilib 
+0

Trình biên dịch có đưa ra lỗi không? Bạn có chắc chắn rằng bạn là chính xác khi nói "trình biên dịch đã cho một trạng thái thoát 1" và không phải là chương trình đã cho một trạng thái thoát của 1? – Celeritas

+0

Celeritas, vâng, đây là những gì tôi nhận được ngay sau khi tôi thực hiện bất kỳ trình biên dịch nào [gcc o f77] –

+0

có thể trùng lặp của [Không thể tìm thấy thư viện C++ trên unix] (http: // stackoverflow.com/questions/10867164/cant-find-c-library-on-unix) –

Trả lời

88

Bạn có thể giải quyết điều này bằng nhiều cách:

  • Sử dụng g++ thay cho gcc: g++ -g -o MatSim MatSim.cpp
  • Thêm -lstdc++: gcc -g -o MatSim MatSim.cpp -lstdc++
  • Thay <string.h> bởi <string>

Đây là một vấn đề liên kết, không phải là một vấn đề trình biên dịch. Cùng một vấn đề được đề cập trong câu hỏi iostream linker error - nó giải thích những gì đang diễn ra.

+0

Cảm ơn Reiner ... Tôi cố gắng gợi ý của bạn và tôi nhận được: _G ++ -g -o MatSim MatSim.cpp -lstdc /usr/bin/ld: không thể tìm thấy -lstdc collect2: ld trở về 1 lối status_ –

+0

Nếu bạn đi với tùy chọn thư viện bổ sung, thì bạn nên sử dụng '-lstdC++', không phải '-lstdc'. Nhưng nếu bạn sử dụng g ++, thì không cần phải thêm thư viện đó nữa. –

+0

Cảm ơn Reinier !!!! bạn và Jonathan Leffler đã khai sáng mã của tôi và bây giờ tôi thực sự có thể tiến lên !!!! –

6

Hầu hết các lỗi trình liên kết này xảy ra do thiếu thư viện.

Tôi đã thêm libstdC++. 6.dylib trong Dự án-> Mục tiêu-> Giai đoạn xây dựng-> Liên kết nhị phân với thư viện.

Giải quyết nó cho tôi trên Xcode 6.3.2 cho iOS 8.3

Chúc mừng!

+0

chia sẻ điều này, con người. Bạn vừa giải quyết được vấn đề của tôi. Tôi đã cố gắng để biên dịch một mục tiêu cho thử nghiệm thống nhất trong dự án của tôi bằng cách sử dụng gtest-1.7.0 Framework và Xcode Version 6.3.2. –

+0

Vui vì nó đã hoạt động :) –

+0

cảm ơn bạn thân của mình đã làm việc :) đã tiết kiệm thời gian của tôi –

Các vấn đề liên quan