Как я заставил gcc выдать .bundle вместо .so?

Я пытаюсь написать расширение Ruby, и весь день успешно компилировал мой nmatrix.so общий объектный файл. Но затем, внезапно, он начинает создавать nmatrix.bundle вместо этого, без какого-либо .so файла вообще.

Это не дает мне никаких ошибок компоновщика, поэтому я не могу представить, почему это может быть. Я также ничего не менял в моем Makefile или extconf.rb. Я последовательно использую Ruby 1.9.3p0 через rvm.

Я попробовал сделать git stash save с моей работой за день и скомпилировать то, что, как я знаю, должно работать без ошибок компоновщика (то, что выдавало .so) раньше. К сожалению, это тоже привело к появлению файла .bundle.

Очевидно, я что-то сделал - возможно, установил что-то по ошибке - что изменило некоторые критические настройки GCC. Это вполне возможно, поскольку я потратил большую часть дня, пытаясь заставить LAPACK и ATLAS собраться, а также в какой-то момент установил homebrew.

Я обнаружил, что существует обходной путь. Я меняю эти две строки:

DLLIB = $(TARGET).bundle
# ...
LDSHARED = $(CC) -dynamic -bundle

на

DLLIB = $(TARGET).so
# ...
LDSHARED = $(CC) -dynamic

И тогда библиотека компилируется и загружается правильно. Однако, я не знаю, что я изменил в extconf.rb (или где-то еще), что привело к автоматической генерации этого Makefile с файлами .bundle вместо .so.

Вопрос в том, как именно я это вызвал, и что мне делать, чтобы это восстановить?

6
задан Doctor Mohawk 12 January 2012 в 20:11
поделиться