2012-01-06 3 views
1

Я выяснил, какие файлы .so необходимы моей программе для работы на других машинах, но я не уверен, что мне нужно сделать с ними, чтобы убедиться, что моя программа их найдет и связываться с ними при выполнении.Распространение общих объектов с помощью моей программы

Я знаю, что на платформах Windows я могу просто выгрузить файлы .dll в каталог исполняемого файла и сделать с ним. Однако это не похоже на Linux.

$ ls 
libjrtp.so.3.9.1 libjthread.so.1.3.1 libQtCore.so.4 libQtGui.so.4 streamer 
$ ./streamer 
./streamer: error while loading shared libraries: libjrtp.so.3.9.1: cannot open shared object file: No such file or directory 

Я нахожу это странным, что программа не может связать с библиотекой, даже если это в основном сидит прямо в рабочем каталоге. Почему это не связано?

ответ

0

Возможно, это не ссылка, потому что . не находится в RPATH вашего двоичного кода (вы можете использовать -R, чтобы установить это). Unix-системы не выглядят в текущем каталоге для необходимых файлов, как это делает Windows. Вы можете подтвердить это с помощью ldd ./binary.

+0

Я работаю с 'qmake', поэтому я добавил' QMAKE_LFLAGS + = -Xlinker -R .' в свой PRO-файл, который сделал трюк. Благодаря! – Pieter

+0

@Pieter Я должен был упомянуть, что это не всегда хорошая идея, потому что он будет искать любой из своих общих объектов в '.', что дает непривилегированным пользователям возможность вставить свои собственные общие библиотеки вместо законных. По крайней мере, подумайте еще раз о том, чтобы упаковать вашу общую библиотеку в более часто используемый каталог. –

+0

Просто, чтобы быть понятным в этом ... будет бинарный вид в * рабочем * каталоге или в его * собственной * директории? В первом случае я вижу только угрозу безопасности. Второе решение было бы более безопасным, но я не знаю, можно ли его достичь. – Pieter