2011-05-13 3 views
1

имеют ошибку с libClang, то я установить его с интригой в конце я получаю:Отсутствующий символ в Haskell libclang связывания: clang_toggleCrashRecovery

[13 of 13] Compiling Clang   (src/Clang.hs, dist/build/Clang.o) 
In file included from ./src/Clang/FFI_stub_ffi.h:6, 

       from src/Clang/FFI_stub_ffi.c:4:0: 

/usr/local/lib/ghc-7.0.3/include/HsFFI.h:29:0: 
    warning: "__STDC_LIMIT_MACROS" redefined 

<command-line>:0:0: 
    note: this is the location of the previous definition 
src/Clang/FFI_stub_ffi.c: In function ‘prim_getCString’: 

src/Clang/FFI_stub_ffi.c:33:0: 
    warning: assignment discards qualifiers from pointer target type 
src/Clang/FFI_stub_ffi.c: In function ‘prim_toggleCrashRecovery’: 

src/Clang/FFI_stub_ffi.c:2181:0: 
    warning: implicit declaration of function ‘clang_toggleCrashRecovery’ 
Registering LibClang-0.0.9... 

, когда я теперь хочу скомпилировать скрипт с GHC, который использует Clang я получить:

ghc --make test.hs -L. 
[1 of 1] Compiling Main    (test.hs, test.o) 
Linking test ... 
/home/foo/.cabal/lib/LibClang-0.0.9/ghc-7.0.3/libHSLibClang-0.0.9.a(FFI_stub_ffi.o): In function `prim_toggleCrashRecovery': 
FFI_stub_ffi.c:(.text+0x1577): undefined reference to `clang_toggleCrashRecovery' 
collect2: ld returned 1 exit status 

кому-то идея, что делать?

+0

Похоже, вы можете закрыть другой вопрос, так как вы сейчас связываетесь, но не с отсутствующим символом. –

ответ

3

я могу воспроизвести это на Arch Linux/x86_64: мой libclang построить emits a warning об отсутствующем символ,

src/Clang/FFI_stub_ffi.c:2181:1: 
    warning: implicit declaration of function ‘clang_toggleCrashRecovery’ 
       [-Wimplicit-function-declaration] 
Registering LibClang-0.0.9... 
Installing library in /home/dons/.cabal/lib/LibClang-0.0.9/ghc-7.0.3 
Registering LibClang-0.0.9... 

и связывая тестовую программу:

import Clang 
main = print "yes" 

терпит неудачу с:

$ ghc --make A.hs 
Linking A ... 
/home/dons/.cabal/lib/LibClang-0.0.9/ghc-7.0.3/libHSLibClang-0.0.9.a(FFI_stub_ffi.o): 
       In function `prim_toggleCrashRecovery': 
FFI_stub_ffi.c:(.text+0x3513): undefined reference to `clang_toggleCrashRecovery' 
collect2: ld returned 1 exit status 

Процесс решения подобных ошибок компоновщика заключается в том, чтобы определить, какой C l . Ibrary архив, символ живет в поиске в моем libclang установить, я не могу найти этот символ:

$ find . -type f -exec grep toggleCrashRecovery {} \; 
$ grep toggleCrashRecovery /usr/lib/llvm/* 
$ grep toggleCrashRecovery /usr/lib/llvm/*/* 
zsh: no matches found: /usr/lib/llvm/*/* 

, который является признаком того, что это может быть что-то только в другой версии libclang. Я использую clang/llvm 2.9, который имеет , а не, этот символ, в то время как Google включает некоторые старые заголовки, которые его включают. Поэтому я думаю, что этот символ больше не доступен в LLVM, и, следовательно, текущий пакет haskell/libclang зависит от LLVM/Clang 2.8.

Решение:

Скачать libclang источник,

$ cabal unpack libclang 

и патч, чтобы удалить ссылки на toggle* функции.

$ ghc --make A.hs 
[1 of 1] Compiling Main    (A.hs, A.o) 
Linking A ... 

исправленная версия здесь: http://www.galois.com/~dons/tmp/LibClang-0.0.10.tar.gz

Я также направил эту информацию автору.

+1

PERFECT! он работает сейчас – develhevel

1

Спасибо Дона за быстрое исправление. Эта проблема решена в последней версии на Hackage: http://hackage.haskell.org/package/LibClang-0.1.0

Пожалуйста «обновление междусобойчик», и вы должны быть хорошо идти. В качестве альтернативы вы можете получить исходный код от https://github.com/chetant/LibClang

 Смежные вопросы

  • Нет связанных вопросов^_^