Моя непростая ☹ судьбинушка показывает, что удобство моей работы администраторам компьютеров всегда похуй. В этом смысле они похожи на советских и российских чиновников, которые забывают, что являются по-существу обслуживающим персоналом. Добавим к этому
некомпетентность и лень. В общем, чем упрашивать такого мудака сделать даже элементарнейшую вещь
(да я сам всё быстро сделаю – пустите только меня в огород к root-терминалу!), нередко проще потратить пару дней на обучение новым
извращениям, необходимым для со(ж)ития с такими вот пидарасами.
Ближе к телу: имеется задача, которую на моём нетбуке (который – по $200) не посчитать. Также имеется ssh-доступ к серверу (который – по $5000), где она наверняка посчитается в разумное время. Но не всё так хорошо, ибо
f2c.h
) я, например, не смог найти на серверах вроде rpmfind. Краткий поиск в сети закончился неутешительным
выводом о слабой совместимости CentOS/Fedora с Debian/Ubuntu.
Скачиваем исходники последней версии glibc
и gcc-4.6
(gcc-4.7
, установленный по умолчанию в Ubuntu Quantal, не подходит):
lftp ftp.gnu.org/gnu/glibc/glibc-2.17.tar.bz2
tar xjf glibc-2.17.tar.bz2
mkdir tmp-build
cd tmp-build
../glibc-2.17/configure --prefix=$HOME/local/ --disable-profile --enable-kernel=2.6.18
make
make install
Без извращений моя программа компилируеся командой
g++ -o prog prog.cpp -O3 -fopenmp -ffast-math -msse2 -mfpmath=sse -Wall -lm -std=c++0x
-lconfig++ -lgsl -lgslcblas
Проблема в том, что откомпилированная таким образом программа (пускай бы и с дополнительной опцией
-static
) будет работать только на нетбуке, но не на сервере (том, который за $5000 –
см. выше).
Откомпилировать на нетбуке программу, которую можно будет скопировать на сервер и там
запустить, сложнее:
/usr/bin/g++-4.6 -nostdlib -static -o prog.static prog.cpp
/usr/lib/gcc/i686-linux-gnu/4.6/crtbegin.o $HOME/local/lib/crti.o
-Wl,--start-group $HOME/local/lib/crt1.o $HOME/local/lib/crtn.o $HOME/local/lib/libc.a
/usr/lib/gcc/i686-linux-gnu/4.6/libstdc++.a /usr/lib/i386-linux-gnu//libconfig++.a
$HOME/local/lib/libc_nonshared.a /usr/lib/gcc/i686-linux-gnu/4.6/libgcc.a /usr/lib/gcc/i686-linux-gnu/4.6/libgcc_eh.a -Wl,--end-group
/usr/lib/gcc/i686-linux-gnu/4.6/crtend.o
-Wl,--start-group $HOME/local/lib/libm.a -lgsl -lgslcblas -Wl,--end-group