2015-04-03 2 views
1

У меня есть проект на C++, но мои данные всего лишь too big для моего компьютера. Итак, я попытался создать свой проект на рабочем столе в нашей лаборатории, но компилятор слишком стар (4.3.5, а у меня было 4.8.1, когда я разработал свой код).Запустите исполняемый файл с Ubuntu в Debian

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

Так что я надеялся, что каким-то образом мне удастся скопировать исполняемый файл, который я создал в своем Ubuntu, на рабочий стол с Debian и запустить его. Но я боюсь, что я слишком много задаю, поэтому отрицательный ответ также является приемлемым.

Мой компьютер (в котором создается исполняемый файл):

[email protected]:~$ uname -a 
Linux samaras-A15 3.8.0-29-generiC#42~precise1-Ubuntu SMP Wed Aug 14 15:31:16 UTC 2013 i686 i686 i386 GNU/Linux 
[email protected]:~$ lsb_release -d 
Description: Ubuntu 12.04.3 LTS 

Лаборатория компьютерной и что происходит, когда я запустить исполняемый файл:

[email protected]:~/Desktop/code$ uname -a 
Linux geomcomp 3.2.0-1-amd64 #1 SMP Fri Feb 17 05:17:36 UTC 2012 x86_64 GNU/Linux 
[email protected]:~/Desktop/code$ lsb_release -d 
Description: Debian GNU/Linux 6.0.10 (squeeze) 
[email protected]:~/Desktop/code$ ./rkd_sam 
./rkd_sam: /usr/lib32/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by ./rkd_sam) 
./rkd_sam: /usr/lib32/libstdc++.so.6: version `GLIBCXX_3.4.17' not found (required by ./rkd_sam) 
./rkd_sam: /usr/lib32/libstdc++.so.6: version `GLIBCXX_3.4.19' not found (required by ./rkd_sam) 

У меня есть надежда, потому что они обе системы Linux , но 32-разрядная и 64-разрядная могут быть проблемой ...:/


С -static флаг, я получил ошибку меньше, но все же ..

[email protected]:~/Desktop/code$ ./rkd_sam 
./rkd_sam: /usr/lib32/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by ./rkd_sam) 
./rkd_sam: /usr/lib32/libstdc++.so.6: version `GLIBCXX_3.4.19' not found (required by ./rkd_sam) 

Зависимости (это на моем компьютере):

[email protected]:~/parallel/rkd_forest/code$ ldd rkd_sam 
    linux-gate.so.1 => (0xb76f8000) 
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb75e9000) 
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb75bd000) 
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb759e000) 
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb73f4000) 
    /lib/ld-linux.so.2 (0xb76f9000) 

и я получаю

which libstdc++

ничего не печатает в лабораторном компьютере, так что значит, игра закончилась?

+0

Является ли ваш проект бесплатным программным обеспечением на http://github.com/? –

+0

Нет, но у него есть страница для загрузки, и это с открытым исходным кодом. Зачем? @BasileStarynkevitch – gsamaras

+0

'libstdC++' не имеет значения: 'which' только находит исполняемые файлы, а не библиотеки. У вас есть libstdC++ на geomcomp, проблема в том, что он несовместим с вашим исполняемым файлом, потому что для вашего исполняемого файла требуется версия libstdC++, для которой требуется более новая версия glibc, чем у geomcomp. – Gilles

ответ

2

Мы не знаем, какую программу вы кодируете, так что это просто дикая догадка.

Ваш компьютер представляет собой 32-битный Intel, поэтому ваш двоичный файл представляет собой бинарный бит ia32 (т.е. x86 32 бит). Таким образом, вы всегда будете ограничены адресным пространством (практически не более 2,5 до 3 Гбайт данных).

машина

Yoru лаборатории является 64-бит Intel работает старую версию Linux

Вы можете попробовать скомпилировать на вашей машине, связывая статически (так g++ -static как при компиляции и во время связи, т.е. make -f Makefile_sam_par clean затем make -f Makefile_sam_par CXX='g++ -static')

Кстати, ваш Makefile_sam_par неправильно, вы должны использовать CXX не CC внутри него (так как обычноCXX и CXXFLAGS предназначены для C++, запустите make -p, чтобы получить встроенные правила внутри make, чтобы понять детали и прочитать documentation of GNU make),. Поэтому сначала исправьте это. См. this example.

Если вы готовы потратить несколько дней на работу, и если у вас много дискового пространства (например,15 Гбайт), доступный на рабочем столе лаборатории, вы можете попытаться скомпилировать последние binutils и недавний компилятор GCC 4.9 (обязательно .... ../configure --prefix=$HOME/soft --program-suffix=-my-4.9); это, вероятно, не стоит усилий.

Возможно, попробуйте попросить какого-нибудь друга (имея более крупный ноутбук, чем ваш, с 64-разрядной версией Linux и более 4 ГБ оперативной памяти) для запуска вашей программы.

BTW, если ваш ноутбук имеет более чем 4Gbytes RAM и некоторые x86-64 процессора (который очень часто в эти дни, за исключением нетбуков), это, безусловно, стоит установить вариант 64 битов Linux.

+0

Какую информацию вы хотите в моей программе? Это C++, используя векторы, кучи и т. Д. Из STL. Мои данные имеют размер 2,6 Гбайта. Как вы нашли номер? Я попробую сейчас, но вы имеете в виду 'g ++' правильно? – gsamaras

+0

Ограничение от 2,5 до 3 байтов для всего процесса. Не только для данных. Так что, наверное, это не подойдет. –

+1

Вы также можете перечислить зависимости библиотеки с 'ldd', скопировать их все в тот же каталог, что и исполняемый, и запустить его с помощью' LD_LIBRARY_PATH =. ./yourprogram' –

1

Вы не сказали, на какой физической машине ваш компьютер. Если это что-то недавнее (за исключением очень маленького нетбука), лучшим вариантом может быть переход вашего ядра на вариант «amd64», а затем компиляция и запуск кода на вашем компьютере с использованием флага -m64 для компилятора C++ для получения 64-битного исполняемый файл.

Эта машина, на которой я печатаю, имеет такую ​​установку, как 32-битное пользовательское пространство, 64-битное ядро ​​и несколько 64-битных программ.

Смежные вопросы