2014-02-07 5 views
1

У меня есть программа, которая использует драйвер QTDS.QSqlDatabase: драйвер QTDS не загружен

в развитии окружающая среда все товарds хорошо. В производстве у меня есть как плагин TDS, так и sybdb, доступный с соответствующими правами.

  1. -rwxr-хт-х 1 foxprd foxprd 47880 29 января 17:33 libqsqltds.so *
  2. -rwxr-хт-х 1 foxprd foxprd 472579 29 января 17:33 libsybdb.so *

они оба в директории, которая была добавлена ​​к LD_LIBRARY_PATH

и еще я получил

QSqlDatabase: QTDS driver not loaded 

EDIT Я так же могу сказать, что:

app.libraryPaths() 

указывает на каталог, в котором есть sqldrivers/каталог, содержащий все эти библиотеки Если я переименовать этот direcotry в разработчика я получаю ту же ошибку, если я ставлю он снова работает.

  1. MyappDir/sqldrivers/libqsqltds.so
  2. MyappDir/sqldrivers/libsybdb.so
  3. MyappDir/sqldrivers/libsybdb.so.5

В разработчика это работает, если и только если каталог здесь. В Prod он не работает ни в одном случае. В то время как «MyappDir /» всегда указан в

app.libraryPaths() 

ответ

0

себе ответ:

Когда Linux приложение загружает его нужно иметь доступ все libXXX.so ему нужно. «ЛД» будет искать их в любом каталоге, объявленном в «LD_LIBRARY_PATH» переменного

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

QCoreApplication app(argc,argv); 
qDebug() << app.libraryPaths(); 

, который напечатан

(«/ my/App/Path», «/ Qt/Dir/Path»)

И с одного из этих путей он должен загрузить плагины. Так что, если в QTDIR у вас есть

/Qt/Dir/Path/plugins/sqldrivers/libqsqltds.so 

Вы хотите, чтобы убедиться, чтобы развернуть что-то вроде:

/my/App/Path/sqldrivers/libqsqltds.so 

это работало нормально, потому что путь приложение всегда в «app.libraryPaths()». Однако, когда все осложняется тем, что libqsqltds.so требует, чтобы «libsybdb.so.5» работал правильно.Что я знал, так что тоже был

/my/App/Path/sqldrivers/libsybdb.so.5 

который был неправ, потому что Qt динамически загружает libqsqltds.so, но не его зависимость, которая, кажется, ЛД рассчитывает найти обычным способом (например, в LD_LIBRARY_PATH)

Дело в том, что в моей среде dev/integration у меня был libsybdb.so.5 на моем пути, но не в моей рабочей среде.

Так что, независимо от того, какие плагины Qt вам нужны, скопируйте каталог плагина (только внутри .so внутри) в вашу производственную среду. А также убедитесь, что выполнение:

ldd /my/App/Path/sqldrivers/libsybdb.so.5 

не будет печатать любой «не найден», поскольку они зависимость не будут появляться с:

ldd /my/App/Path/myAppBin 
Смежные вопросы