2011-12-30 26 views
28

Tôi đã sử dụng một khuôn khổ tăng từ liên kết dưới đây để biết dự án iPhone Xcode của tôi: https://goodliffe.blogspot.com/2010/09/building-boost-framework-for-ios-iphone.htmlxcode với đẩy mạnh: mối liên kết (Id) Cảnh báo về Cài đặt hiển thị

nó hoạt động tốt nhưng tôi luôn nhận được hàng trăm của Apple Mach- O Linker (id) Cảnh báo như:

truy cập trực tiếp trong __ZN5boost15program_options6detail7cmdline24handle_additional_parserERSt6vectorISsSaISsEE để biểu tượng yếu toàn cầu __ZTVN5boost17bad_function_callE nghĩa biểu tượng yếu không thể được ghi đè khi chạy. Điều này có thể do các đơn vị dịch thuật khác nhau được biên dịch với các cài đặt hiển thị khác nhau.

Làm cách nào để loại bỏ các cảnh báo đó trong mã?

chỉnh sửa: Bằng cách đặt Ký hiệu Ẩn theo mặc định = CÓ, tôi quản lý để loại bỏ hầu hết các cảnh báo nhưng còn lại 3 thứ nữa sẽ không biến mất, bất cứ ai có thể cho tôi biết lý do không?

chỉnh sửa lại: Sau khi xây dựng lại 3 cảnh báo còn lại sẽ biến mất! Vì vậy, giải pháp của tôi đã làm việc!

Trả lời

24

Doe chỉ tìm cách để thoát khỏi hàng trăm cảnh báo như thế này: bộ cho toàn bộ mục tiêu, dự án với Biểu tượng ẩn theo mặc định xây dựng thiết để YES

+2

Là 'yes' vấn đề hoặc giải pháp? :) – sarnold

+0

được đặt thành có sẽ sửa các cảnh báo – Gob00st

+2

Làm thế nào khó xử. Đối với tôi, thiết lập Symbols Hidden by Default thành No, loại bỏ các cảnh báo tương tự đến từ việc liên kết với một thư viện sử dụng Eigen. –

34

Nếu tăng được bao gồm bởi nhiều dự án, mỗi dự án phải có các giá trị tương tự cho

Symbols Hidden by Default 
Inline Methods Hidden 
+0

Lần thứ hai tôi đến câu trả lời này và nó đã giúp tôi khắc phục cảnh báo. Không có ý tưởng làm thế nào dự án có thể đã kết thúc với "Inline phương pháp ẩn" được ra khỏi đồng bộ AGAIN. Cập nhật Xcode đã thay đổi nó? Uh .. –

+0

+1 Yep - không giống như câu trả lời chỉ gợi ý 'Biểu tượng ẩn theo Mặc định' cần thiết để khớp, tôi thấy rằng' Phương thức nội tuyến ẩn '* cũng * cần để khớp. – aardvarkk

0

Nếu tăng được bao gồm bởi nhiều dự án, mỗi dự án phải có các giá trị tương tự cho

Biểu tượng ẩn theo mặc định Inline phương pháp ẩn

nerith nói là đúng, nhưng trong Xcode 4.6.3, họ không phải là "biểu tượng ẩn theo mặc định" ở trên và "Inline Phương pháp Hidden", và tôi đặt gcc_symbols_private_extern để có, cảnh báo sẽ biến mất.

3

Trình liên kết phàn nàn về các cài đặt hiển thị khác nhau giữa dự án của bạn và Boost.

Bạn cũng có thể khắc phục sự cố đó bằng cách biên dịch lại Boost với cùng cài đặt tương thích.

Chỉ cần thêm

cxxflags=-fvisibility=hidden 

cxxflags=-fvisibility-inlines-hidden 

vào dòng bjam lệnh.

+4

-fvisibility = ẩn ngụ ý -fvisibility-inlines-hidden. Chỉ cái trước là cần thiết. – johnwbyrd

0

Tôi cũng gặp sự cố này.

Nó chỉ ra rằng tôi đã vô tình làm một cái gì đó như thế này:

#pragma GCC visibility push(default) 
#include <SomeExternalLibrary.h> 
void myExampleSymbol(); 
#pragma GCC visibility pop 

Mà tôi giải quyết bằng cách thay đổi để:

#include <SomeExternalLibrary.h> 
#pragma GCC visibility push(default) 
void myExampleSymbol(); 
#pragma GCC visibility pop 
Các vấn đề liên quan