標籤

C++ (12) Linux (6) MacOSX (4) Makefile (3) Matlab (3) Ubuntu (3) Android (2) C (1) Refactoring (1)

2013年1月31日 星期四

[cgdb] 在Mountain Lion上安裝cgdb

其實不只有在Mountain Lion有遇到這個問題
在還沒升級前的Snow Leopard也遇過一樣的問題

在安裝完readline和ncurse後(安裝readline若遇到-dynamiclib請見之前的文章)
就是到cgdb解開壓縮檔 然後執行

1) ./configure --prefix=/usr/local
2) make

接著馬上就會遇到一連串undefined symbol的問題
這些symbol通常都是一堆由 "_rl_" 開頭的function
(在snow leopard和mountain lion遇到的不太一樣 不過大致都是以 "_rl_" 開頭)


gcc -I../../../lib/adt -I../../../lib/rline -I../../../lib/util -I../../../lib/tgdb/annotate-two -I../../../lib/tgdb/gdbmi -I../../../lib/tgdb/tgdb-base -g -O2 -L../../../lib/adt -L../../../lib/rline -L../../../lib/util -L../../../lib/tgdb/annotate-two -L../../../lib/tgdb/gdbmi -L../../../lib/tgdb/tgdb-base  -o tgdb_driver driver.o libtgdb.a ../../../lib/tgdb/annotate-two/libtgdb_a2.a ../../../lib/tgdb/gdbmi/libtgdb_mi.a ../../../lib/rline/librline.a ../../../lib/adt/libadt.a ../../../lib/util/libutil.a -lreadline -lncurses -lm
Undefined symbols for architecture x86_64:
  "_rl_catch_sigwinch", referenced from:
      _rline_initialize in librline.a(rline.o)
  "_rl_complete_internal", referenced from:
      _rline_rl_complete in librline.a(rline.o)
  "_rl_completion_mode", referenced from:
      _rline_rl_complete in librline.a(rline.o)
  "_rl_completion_word_break_hook", referenced from:
      _rline_rl_complete in librline.a(rline.o)
  "_rl_delete_text", referenced from:
      _rline_clear in librline.a(rline.o)
  "_rl_invoking_keyseqs", referenced from:
      _rline_get_keyseq in librline.a(rline.o)
  "_rl_last_func", referenced from:
      _rline_rl_complete in librline.a(rline.o)
      _rline_rl_callback_read_char in librline.a(rline.o)
  "_rl_mark", referenced from:
      _rline_clear in librline.a(rline.o)
  "_rl_named_function", referenced from:
      _rline_get_keyseq in librline.a(rline.o)
  "_rl_resize_terminal", referenced from:
      _rline_resize_terminal_and_redisplay in librline.a(rline.o)
  "_rl_translate_keyseq", referenced from:
      _rline_get_keyseq in librline.a(rline.o)
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [tgdb_driver] Error 1

解法如下:
把/usr/lib/libreadline.dylib砍掉就好 ==...
(可以試著把libreadline.dylib改名成libreadline_backup.dylib
然後重新到readline-6.1的資料夾下執行sudo make install一遍
會發現/usr/lib/下並不會產生新的libreadline.dylib
也就是說其實那個檔跟本就不是readline-6.1產生的
哪來的別問我 可能是系統本來就有 或是其他程式安裝時偷偷灌的 但沒灌完整就是了)

砍掉libreadline.dylib後重新make就搞定了

別忘了最後一步 sudo make install


沒有留言:

張貼留言