Олег Шалаев  >Мой Debian-опыт; >Заметки по C++

Заметки по C++

Я – не программист, и C++ интересует меня исключительно с прикладной точки зрения: как бы побыстрее посчитать что-нибудь интересное без ошибок. Это я к тому, что не судите строго.

Компиляция на новой системе программы, предназначенной для выполнения на старой системе

Моя непростая ☹ судьбинушка показывает, что удобство моей работы администраторам компьютеров всегда похуй. В этом смысле они похожи на советских и российских чиновников, которые забывают, что являются по-существу обслуживающим персоналом. Добавим к этому некомпетентность и лень. В общем, чем упрашивать такого мудака сделать даже элементарнейшую вещь (да я сам всё быстро сделаю – пустите только меня в огород к root-терминалу!), нередко проще потратить пару дней на обучение новым извращениям, необходимым для со(ж)ития с такими вот пидарасами.

Ближе к телу: имеется задача, которую на моём нетбуке (который – по $200) не посчитать. Также имеется ssh-доступ к серверу (который – по $5000), где она наверняка посчитается в разумное время. Но не всё так хорошо, ибо

Решение проблемы – самостийная компиляция glibc не нетбуке

Скачиваем исходники последней версии 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

Олег Шалаев
Last modified: Fri Apr 26 13:03:29 EDT 2013