ошибка "пропуск несовместимого" в контесте - PullRequest
0 голосов
/ 08 декабря 2011

Я считаю, что в контесте отсутствуют правильные флаги, но я не могу определить проблему, глядя на содержимое mkmf.log, которое приведено ниже. Любые идеи приветствуются!

<code>
have_library: checking for main() in -lidn... -------------------- no</p>

<p>"i486-linux-gnu-gcc -o conftest -I /backfire/staging_dir/host/include/ruby-1.9.1/i486-linux -I /backfire/staging_dir/host/include/ruby-1.9.1/ruby/backward -I /backfire/staging_dir/host/include/ruby-1.9.1 -I. -O2 -I /backfire/staging_dir/host/include -D_FILE_OFFSET_BITS=64 -O2 -I /backfire/staging_dir/host/include -O2 -I /backfire/staging_dir/host/include conftest.c  -L. -L /backfire/staging_dir/host/lib -Wl,-R /backfire/staging_dir/host/lib -L.  -rdynamic -Wl,-export-dynamic     -Wl,-R -Wl, /backfire/staging_dir/host/lib -L /backfire/staging_dir/host/lib -lruby-static  -lpthread -lrt -ldl -lcrypt -lm   -lc"
checked program was:
/* begin <em>/
1: #include "ruby.h"
2: 
3: int main() {return 0;}
/</em> end */</p>

<p>"i486-linux-gnu-gcc -o conftest -I /backfire/staging_dir/host/include/ruby-1.9.1/i486-linux -I /backfire/staging_dir/host/include/ruby-1.9.1/ruby/backward -I /backfire/staging_dir/host/include/ruby-1.9.1 -I. -O2 -I /backfire/staging_dir/host/include -D_FILE_OFFSET_BITS=64 -O2 -I /backfire/staging_dir/host/include -O2 -I /backfire/staging_dir/host/include conftest.c  -L. -L /backfire/staging_dir/host/lib -Wl,-R /backfire/staging_dir/host/lib -L.  -rdynamic -Wl,-export-dynamic     -Wl,-R -Wl, /backfire/staging_dir/host/lib -L /backfire/staging_dir/host/lib -lruby-static -lidn  -lpthread -lrt -ldl -lcrypt -lm   -lc"
/usr/bin/ld: skipping incompatible  /backfire/staging_dir/host/lib/libidn.so when searching for -lidn
/usr/bin/ld: skipping incompatible  /backfire/staging_dir/host/lib/libidn.a when searching for -lidn
/usr/bin/ld: skipping incompatible  /backfire/staging_dir/host/lib/libidn.so when searching for -lidn
/usr/bin/ld: skipping incompatible  /backfire/staging_dir/host/lib/libidn.a when searching for -lidn
/usr/bin/ld: cannot find -lidn
collect2: ld returned 1 exit status
checked program was:
/* begin */
1: #include "ruby.h"
2: 
3: /<em>top</em>/
4: int main() {return 0;}
5: int t() { void ((<em>volatile p)()); p = (void ((</em>)()))main; return 0; }
/* end */</p>

<p>"i486-linux-gnu-gcc -o conftest -I /backfire/staging_dir/host/include/ruby-1.9.1/i486-linux -I /backfire/staging_dir/host/include/ruby-1.9.1/ruby/backward -I /backfire/staging_dir/host/include/ruby-1.9.1 -I. -O2 -I /backfire/staging_dir/host/include -D_FILE_OFFSET_BITS=64 -O2 -I /backfire/staging_dir/host/include -O2 -I /backfire/staging_dir/host/include conftest.c  -L. -L /backfire/staging_dir/host/lib -Wl,-R /backfire/staging_dir/host/lib -L.  -rdynamic -Wl,-export-dynamic     -Wl,-R -Wl, /backfire/staging_dir/host/lib -L /backfire/staging_dir/host/lib -lruby-static -lidn  -lpthread -lrt -ldl -lcrypt -lm   -lc"
/usr/bin/ld: skipping incompatible  /backfire/staging_dir/host/lib/libidn.so when searching for -lidn
/usr/bin/ld: skipping incompatible  /backfire/staging_dir/host/lib/libidn.a when searching for -lidn
/usr/bin/ld: skipping incompatible  /backfire/staging_dir/host/lib/libidn.so when searching for -lidn
/usr/bin/ld: skipping incompatible  /backfire/staging_dir/host/lib/libidn.a when searching for -lidn
/usr/bin/ld: cannot find -lidn
collect2: ld returned 1 exit status
checked program was:
/* begin */
1: #include "ruby.h"
2: 
3: /<em>top</em>/
4: int main() {return 0;}
5: int t() { main(); return 0; }
/* end */

1 Ответ

1 голос
/ 19 февраля 2012

mkmf.rb Руби использует собственный компилятор для проверки libidn, но, поскольку ваша цель - MIPS, он должен вместо этого использовать кросс-компилятор. Я предполагаю, что файлы libidn.so и libidn.a, перечисленные в вашем mkmf.log, были созданы для MIPS. Поскольку нативный компилятор i486 нуждается в библиотеках i486, он сообщает об ошибке «пропуск несовместимого» при обнаружении файлов MIPS.

Я думаю, вам нужно изменить файл extconf.rb, чтобы он указывал на кросс-компилятор. Что-то вроде:

require 'mkmf'

CONFIG['CC'] = '/path/to/mips-gcc'

Кроме того, вам, вероятно, потребуется указать mkmf.rb на заголовочные файлы Ruby для MIPS. Я не уверен, что все должно быть установлено, но я предполагаю, что по крайней мере CONFIG['arch'] и CONFIG['archdir'] должны быть переопределены в файле extconf.rb.

...