2014-01-05 4 views
-1

Я использую Code :: Blocks для проекта. Я не использовал IDE для Linux в течение многих лет, поэтому я немного не знаком с Linux IDE.Преодолеть DLL Ад с кодом :: Блоки

Я работаю с проектом OpenSSL, который использует проверенную FIPS библиотеку. Я продублировал компилятор компилятора GCC и изменил его, чтобы использовать fipsld OpenSSL (и установить его как значение по умолчанию).

Когда код проекта выполняется в соответствии с Code :: Blocks через F8, FIPS_mode_set с ошибкой 252104805 (0xF06D065). 0xF06D065 является:

$ openssl errstr 0xF06D065 
error:0F06D065:common libcrypto routines:FIPS_mode_set:fips mode not supported 

, который говорит мне Code :: Blocks не использует OpenSSL Я указанный в /usr/local/ssl/lib. Скорее, программа использует библиотеку, отличную от FIPS, предоставленную Debian в /usr/lib/x86_64-linux-gnu/.

Изображение настроек библиотеки ссылок приведено ниже. Обратите внимание, что библиотеки полностью указаны, и ничего не остается случайным.

Code::Blocks link library settings

CodeBlocks явно делает вещи с LD_LIBRARY_PATH (как показано ниже).

LD_LIBRARY_PATH settings

Я также проверил проект с использованием правильных поисковых каталогов - /usr/local/ssl/include для заголовков и /usr/local/ssl/lib для линкера.

С протоколирования компилятором множества к «Full Command Line», вот что я получаю из журнала сборки:

-------------- Build: Debug in ac --------------- 

Compiling: main.cpp 
/home/jwalton/Desktop/ac/main.cpp:8:5: warning: unused parameter ‘argc’ [-Wunused-parameter] 
/home/jwalton/Desktop/ac/main.cpp:8:5: warning: unused parameter ‘argv’ [-Wunused-parameter] 
Linking console executable: bin/Debug/ac 
Output size is 569.67 KB 
Process terminated with status 0 (0 minutes, 0 seconds) 
0 errors, 2 warnings 

Я знаю предложения Basile Starynkevitch на rpath х и LD_PRELOAD трюков, но это похоже, одна из тех вещей, которые IDE должна обрабатывать для меня (Visual Studio будет обрабатывать ее правильно и даже дает нам поле ввода set Working Directories to find additional libraries).

Любые идеи по созданию кода :: Блоки используют общие объекты в /usr/local/ssl/lib при выполнении программы под отладчиком?

+0

Пожалуйста, опубликуйте полный журнал сборки из CodeBlocks. Установите для опции «показать полную командную строку»: http://forums.codeblocks.org/index.php?topic=662.0 –

+0

Alex - Спасибо, добавлено. – jww

ответ

1

Code::Blocks не использовать shared objects (DLL - это предмет Windows). Потому что Code::Blocks просто IDE. IDEs прославлены source code editors с возможностью запуска внешниеsoftware development tools. Вы могли (и иногда вам нужно, по крайней мере, узнать, как это происходит) отредактируйте свой код с помощью простого хорошего редактора, например emacs, и создайте его с помощью команд. Ваш IDE просто выполнять команды, в частности в compiler и linker, возможно, с использованием gcc

Так что использование общих объектов в /usr/local/ssl/lib/ является компилятор и компоновщик (и выполнения dynamic linker). BTW, /usr/local/ssl/lib/ - очень странное имя для каталога, содержащего общие объекты; вы должны были сконфигурировать OpenSSL, который будет установлен в /usr/local/lib/!

Во-первых, я действительно считаю, вы должны перенастроить и перекомпилировать и перестроить и переустановить SSL, чтобы установить его под /usr/local/ (или, возможно, /opt/) префиксов (то есть совместно используемые библиотеки в /usr/local/lib).

Тогда вы можете добавить соответствующие опции для ld linker (from binutils). Вы, вероятно, хотите -L/usr/local/ssl/lib (к команде gcc, которая работает ld), и вы можете пройти -Wl,-rpath (см. this).

Я хотел бы предложить, чтобы переустановить SSL в /usr/local/, добавьте /usr/local/lib/ в /etc/ld.so.conf (или, по крайней мере, в ваш LD_LIBRARY_PATH ...) и запустить ldconfig

В противном случае, добавить по крайней мере /usr/local/ssl/lib/ перед вашим LD_LIBRARY_PATH (а также -L/usr/local/ssl/lib/).

Читать Program Library HowTo, ответы на this и How To Write Shared libraries бумаги Drepper в.

+0

Thnaks Basile. «... отредактируйте свой код с помощью простого хорошего редактора, такого как emacs, и создайте его с помощью команд» - обычно это то, что я делаю в Linux, потому что в IDE были так много проблем в прошлом (Visual Studio настолько хороша, что трудно принимайте меньше). Я даже пишу свои make-файлы вручную на Linux. Я надеялся, что автозаполнение IDE ускорит разработку, поскольку я презираю grepping исходных файлов OpenSSL для имен функций. – jww

+0

Нет, IDE замедляют развитие, потому что они скрывают вещи. Возможно, вы хотите [ctags] (http://en.wikipedia.org/wiki/Ctags) или 'etags' (с' emacs')? –

+0

Не для меня Basile;) – jww

3

Ваша IDE дает указание компилятору связать с указанными библиотеками , но не загружать их во время выполнения. Для этого последнего, что должно произойти, вам нужно пройти еще один вариант линкера, а именно

-rpath=/path/to/directory/with/your/libraries 

или, если компоновщик вызывается компилятором,

-Wl,-rpath=/same/thing 
+0

Спасибо n.m. Я запускаю это в Code :: Blocks через F8. Итак, Code :: Blocks не обрабатывает вещи, поэтому они «просто работают», как Visual Studio? Извините, что спросила. Я не работал в среде IDE Linux годами. – jww

+1

Это не код :: Blocks vs Visual Studio. Это Unix vs Windows. Они не одинаковы. Учите их, любите. –

0

Просто откройте терминал и введите

export LD_LIBRARY_PATH=/path/to/your/libraries 
sudo ldconfig 
Смежные вопросы