2012-11-16 35 views
7

Tôi đang cố gắng biên dịch chương trình bằng GCC-4.7.1 tự biên dịch trên Mac OS 10.8.2. Chương trình sử dụng openMP và trình biên dịch thành công; Tuy nhiên, khi tôi cố gắng để chạy các chương trình, các mối liên kết động phàn nàn vớiThiếu ___emutls_get_address với gcc-4.7 và openMP

dyld: lazy symbol binding failed: Symbol not found: ___emutls_get_address 
    Referenced from: /usr/local/gcc-4.7.1/lib/libgomp.1.dylib 
    Expected in: /usr/lib/libSystem.B.dylib 

dyld: Symbol not found: ___emutls_get_address 
    Referenced from: /usr/local/gcc-4.7.1/lib/libgomp.1.dylib 
    Expected in: /usr/lib/libSystem.B.dylib 

Vấn đề này liên tục xuất hiện trong bất kỳ chương trình biên soạn với -fopenmp, bao gồm MWe

#include <stdio.h> 

int main() { 
    #pragma omp parallel 
    printf("Hallo!\n"); 
    return 0; 
} 

Lưu ý rằng giải pháp gợi ý trong What is the "___emutls_get_address" symbol?, cụ thể là thêm -lgcc_eh trong giai đoạn liên kết, không hoạt động (tôi vẫn nhận được cùng một thông báo lỗi dyld).

+0

Lạ, tôi đã biên dịch gần đây GCC 4.7.1 trên OS X 10.8.2 theo [hướng dẫn này] (http://solarianprogrammer.com/2012/07/21/compiling-gcc-4-7-1- mac-osx-lion /) và hỗ trợ OpenMP hoạt động hoàn hảo. –

+0

@HristoIliev Tôi sẽ kiểm tra lại cách tôi biên soạn nó và thử biên dịch lại. Hy vọng rằng vấn đề biến mất ... –

+0

Một câu hỏi và câu trả lời tương tự đã được đăng ở đó: http://stackoverflow.com/questions/7885246/what-is-the-emutls-get-address-symbol – FabienRohrer

Trả lời

1

Tôi đã có cùng một vấn đề. Trong trường hợp của tôi, nó được gây ra bởi việc liên kết với một thư viện (tôi không nhớ cái nào) của một phiên bản cũ hơn của gcc được cài đặt bởi XCode, mà là trong/usr/lib. Khi tôi sửa chữa nó để liên kết với các thư viện gcc mới hơn của phiên bản tôi được sử dụng để biên dịch (trong/usr/local) lỗi này đã được cố định.

Vì vậy, chỉ cần kiểm tra thực thi xây dựng của bạn và tất cả các thư viện nó được liên kết với việc sử dụng

otool -L EXECUTABLE_OR_DYLIB 

Và nếu bạn tìm thấy bất cứ điều gì liên kết với thư viện của một gcc cũ, khắc phục điều đó.

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