//---------------------------------------------------------------------------
// file checkdll.cpp 2020.09.19
//---------------------------------------------------------------------------
#include
#include
//---------------------------------------------------------------------------
typedef int (*pDllTest) (const char* pStr);
//---------------------------------------------------------------------------
int InstallSo (void);
int UnInstallSo (void);
int MainWork (int argc,char *argv[]);
//---------------------------------------------------------------------------
void* libHWND = NULL;
pDllTest DllTest = NULL;
//---------------------------------------------------------------------------
// укажем текущую директорию для поиска динамической библиотеки: export LD_LIBRARY_PATH=.
// или укажем полный путь к библиотеке
const char* pDllLibName = "testdll.so"; // имя динамической библиотеки
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
int main(int argc,char *argv[])
{
printf("--- main (checkdll test) v1.0 2019.09.19 ---\n");
int iRetLib = -1;
int iRetC = -1;
for(int i=0;i==0;++i,iRetC=0)
{
iRetLib = InstallSo(); if(iRetLib < 0) break;
printf("Install .so - OK!\n");
iRetC = MainWork(argc,argv); if(iRetC < 0) break;
}
UnInstallSo();
return iRetC;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
int InstallSo(void)
{
int iRetC = 1;
for(int i=0;i==0;++i,iRetC=0)
{
//загрузка библиотеки
libHWND = ::dlopen(pDllLibName, RTLD_LAZY);//RTLD_LAZY);RTLD_NOW);
if(!libHWND) { printf("dlopen() error: %s\n", dlerror()); iRetC = -1; break; }
//ищем в библиотеке требуемые процедуры
DllTest = (pDllTest)::dlsym(libHWND, "DllTest");
if(!DllTest) { printf("found DllTest error: %s\n", dlerror()); iRetC = -2; break; }
}
return iRetC;
}
//---------------------------------------------------------------------------
int UnInstallSo(void)
{
int iRetC = 1;
for(int i=0;i==0;++i,iRetC=0)
{
if(!libHWND) break;
::dlclose(libHWND);
libHWND=NULL;
}
return iRetC;
}
//---------------------------------------------------------------------------
int MainWork(int argc,char *argv[])
{
int iRetC=-1;
if(DllTest)
{
iRetC = DllTest("MainWork");
// iRetC = DllTest(NULL);
printf("iRetC=%d\n",iRetC);
}
return iRetC;
}
//---------------------------------------------------------------------------