Функция гистограммы в программе ANSI C: GSL и / или другие? - PullRequest
1 голос
/ 06 декабря 2011

Если я просто хочу использовать библиотеку gsl_histogram.h из Научной библиотеки Gnu (GSL), могу ли я скопировать ее с существующего компьютера (Mac OS Snow Leopard), на котором установлен GSL, на другой компьютер (Linux CentOS 5.7), который не установлен GSL, а просто использовать оператор #include <gls_histogram.h> в моей программе на c? Будет ли это работать?

Или мне нужно пройти полную установку GSL на Linux, хотя мне нужна только одна эта библиотека?

Ответы [ 2 ]

3 голосов
/ 06 декабря 2011

Простого копирования заголовка gsl_histogram.h недостаточно.Заголовок указывает только интерфейс, предоставляемый этой библиотекой.Вам также нужно будет копировать двоичные файлы, такие как *.so и *.a, но трудно сказать, какие из них копировать.Поэтому я думаю, что вам лучше просто установить его на свой компьютер.Это довольно просто, просто используйте этот учебник , чтобы найти и установить пакет GSL.

Так что, несомненно, существует множество библиотек.Однако конкретным является Gnuplot.Используя его, вам даже не нужно компилировать код, однако вам нужно прочитать немного документации.Но, к счастью, уже есть вопрос о том, как нарисовать гистограмму с помощью Gnuplot в Stackoverflow: Гистограмма с использованием gnuplot? Стоит отметить, что Gnuplot на самом деле очень мощный инструмент, поэтому потраченное время на чтение его документации, безусловно, окупится.

1 голос
/ 06 декабря 2011

Нельзя копировать библиотеки из ОС и ожидать, что они будут работать без изменений.

OS X использует формат объектного файла Mach-O , в то время как современные системы Linux используют формат объектного файла ELF . Обычный компоновщик / загрузчик ld.so(8) не будет знать, как загрузить объектные файлы формата Mach-O для запуска исполняемого файла. Так что вам понадобится Apple ld.so(8) - или как они называют их загрузчик. (Это было какое-то время.)

Кроме того, объектные файлы из OS X будут связаны с поставляемым Apple libc и требуют соответствующих символов из библиотеки, поставляемой Apple. Вам также необходимо предоставить предоставленную Apple libc в системе Linux. Эта библиотека C будет пытаться совершать системные вызовы, используя номера системных вызовов OS X и соглашения о вызовах. Я гарантирую, что номера системных вызовов изменились, и почти наверняка соглашения о вызовах отличаются.

В то время как общий загрузчик объектов binfmt_misc ядра Linux может использоваться для обучения ядра загрузке различных форматов объектных файлов, а системный вызов personality(2) ядра можно использовать для выбора между различными соглашениями о вызовах, номерами системных вызовов, и так далее, объем работы, необходимый для выполнения этой работы, является не чем иным, как огромным: Проект WINE работает именно над этой проблемой (но с COFF формата Windows и поддерживающими библиотеками) с 1993 года.

Было бы проще запустить:

apt-get install libgs0-dev

или любой другой эквивалент, который вы выбрали. Если ваш дистрибутив не делает его легкодоступным, все равно будет проще скомпилировать и установить библиотеку вручную, чем пытаться заставить работать версию OS X.

...