2010-04-28 27 views
6

Gần đây tôi đã cài đặt (từ trình cài đặt nhị phân) GHC 6.12 và Haskell Platform 2010.1.0.1 trên Intel MacBook của tôi chạy OS X 10.5.8 và ban đầu, mọi thứ hoạt động tốt. Chỉnh sửa: Tôi phải cài đặt cabal, alexhappy từ nguồn, nhưng sau rằng, mọi thứ dường như hoạt động tốt. Tuy nhiên, tôi phát hiện ra rằng nếu tôi sử dụng cabal install để cài đặt một gói phần mềm mà phụ thuộc vào một thư viện MacPorts (ví dụ, cabal install --extra-lib-dirs=/opt/local/lib --extra-include-dirs=/opt/local/include gd), mọi thứ hoạt động tốt trong GHCi, nhưng nếu tôi cố gắng biên soạn, tôi nhận được lỗiGHC 6.12 và MacPorts

Linking test ... 
Undefined symbols: 
    "_iconv_close", referenced from: 
     _hs_iconv_close in libHSbase-4.2.0.0.a(iconv.o) 
    "_iconv", referenced from: 
     _hs_iconv in libHSbase-4.2.0.0.a(iconv.o) 
    "_iconv_open", referenced from: 
     _hs_iconv_open in libHSbase-4.2.0.0.a(iconv.o) 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

Sau khi một số Googling, tôi tìm thấy a long Haskell-cafe thread thảo luận về vấn đề này. Bản tóm tắt có vẻ là MacPorts installs an updated version of libiconv và giao diện nhị phân hơi khác so với phiên bản đi kèm với hệ thống. Do đó, nếu bạn cố gắng liên kết với bất kỳ thư viện MacPorts nào, libiconv của MacPorts cũng được liên kết; và kể từ khi thư viện cơ sở được xây dựng để liên kết với một phiên bản khác của libiconv, mọi thứ bị hỏng. Tôi đã thử setting LD_LIBRARY_PATH and DYLD_LIBRARY_PATH và thêm nhiều cờ hơn để cố gắng xem lại một lần nữa() (ví dụ:cabal install --extra-lib-dirs=/opt/local/lib --extra-include-dirs=/opt/local/include --extra-lib-dirs=/usr/lib --extra-include-dirs=/usr/include gd), nhưng không hoạt động. Gỡ cài đặt MacPorts libiconv không thực sự là một tùy chọn, vì tôi có một loạt các cổng được cài đặt phụ thuộc vào nó --- bao gồm một số cổng tôi muốn Haskell liên kết tới, như gd2.

Từ những gì tôi đã xem trực tuyến, bản cập nhật thực sự có vẻ là "bạn đã bị lừa": bạn không thể liên kết với bất kỳ thư viện MacPort nào trong khi biên dịch với GHC và dường như không có giải pháp nào. Tuy nhiên, chủ đề đó là từ cuối năm 2009, vì vậy tôi nghĩ có một cơ hội mà ai đó có một giải pháp, giải pháp, hack vô lý ... bất cứ điều gì, thực sự. Vì vậy: không ai biết làm thế nào để có được GHC 6.12 để liên kết với libiconv hệ thống cùng lúc với nó liên kết đến các thư viện từ MacPorts? Hoặc, thất bại, một cách để tạo liên kết không vi phạm theo cách thông minh khác?

+0

bạn đã cài đặt Haskell vBulletin nhị phân, hoặc MacPorts xây dựng? Hoặc nguồn xây dựng? –

+0

Trình cài đặt nhị phân cho cả GHC và Nền tảng Haskell. Tôi sẽ chỉnh sửa câu hỏi để phản ánh điều đó. –

+0

Tôi nhận được chính xác vấn đề này với GHC 6.12.3 mà tôi đã tạo từ nguồn. –

Trả lời

9

Tôi đã gặp lỗi tương tự trên MacOSX 10.5.8 khi tôi cài đặt haskell-platform-2010.1.0.1-i386 và cố gắng biên dịch chương trình haskell. Giải pháp cho tôi là thêm tùy chọn "-L/usr/lib" vào ghc khi biên dịch chương trình. Tôi tin rằng điều này được quản lý để có được mối liên kết để tìm kiếm đầu tiên/usr/lib cho thư viện iconv mà giải quyết vấn đề cho tôi.

+1

Tôi có thể thề rằng tôi đã thử điều này, nhưng khi tôi đang biên soạn một cái gì đó sử dụng GTK hôm nay và nhận được cùng một lỗi, tôi nghĩ rằng tôi muốn cho nó một shot. Lo và kìa, nó đã hoạt động! Cảm ơn bạn! –

+1

Làm cách nào để bạn thực hiện việc này khi cài đặt mọi thứ bằng cabal? –

+5

Một "extra-lib-dirs:/usr/lib" đơn giản trong ~/.cabal/config đã xử lý điều đó cho tôi. –

0

Điều này thật kỳ lạ: afaik Platform 2010.1.0.1 does not work on OS X 10.5.8, điều này đã được báo cáo và xác minh bởi một số người bao gồm cả bản thân tôi và thú vị hơn - by you!

+2

Lỗi đó chỉ ra rằng * cabal * không hoạt động --- đối với tôi, ít nhất, GHC và GHCi hoạt động tốt. Tôi đã phải cài đặt 'cabal',' alex', và 'happy' từ nguồn; một khi tôi đã làm điều đó, tất cả mọi thứ đã làm việc (ngoại trừ lỗi libiconv này). Tốt bắt, mặc dù. –

1

Tôi đã làm cho sự cố của mình biến mất bằng cách gỡ cài đặt MacPorts. Bạn có thể có thể nhận được ngay với chỉ cần gỡ cài đặt phiên bản MacPorts của libiconv và bất kỳ thư viện mà phụ thuộc vào nó.

+1

Điều này cũng phù hợp với tôi. HomeBrew có vẻ là một lựa chọn tốt cho MacPorts. –

1

Tôi hơi xấu hổ khi phải thừa nhận điều này, nhưng tôi đã có một số thành công với câu thần chú như sau:

LIBRARY_PATH=/usr/lib:/opt/local/lib cabal install --ghc-option="-L/usr/lib" SDL-gfx 
0

Có lẽ điều này có thể tốt hơn cabal configure --extra-lib-dir=/usr/lib Nó giải quyết vấn đề trên OSX Mountain Lion

0

tôi cố định bởi:

stack build --ghc-options "-L/usr/lib"