еквивалент на DLL в Linux?
7 отговора
519 прегледа
еквивалент на DLL в Linux?
Какъв е еквивалента и мога ли в такава библиотека да създавам потребителски интерфейс?
Re: еквивалент на DLL в Linux?
ми имаше някакви о файлове
ама дали са еквивалент на длл
ама дали са еквивалент на длл
Re: еквивалент на DLL в Linux?
има и са много ... наи просто можеш да ползваш директно обджект фаиловете, които могат да се компресират с ар съсхто така можеш да направиш шаред либс с -shared опциата на лд ...
-shared
-Bshareable
Create a shared library. This is currently only sup-
ported on ELF, XCOFF and SunOS platforms. On SunOS,
the linker will automatically create a shared library
if the -e option is not used and there are undefined
symbols in the link.
По този въпрос съществуват две мнения. Едното е неправилно, а другото е моето.
-shared
-Bshareable
Create a shared library. This is currently only sup-
ported on ELF, XCOFF and SunOS platforms. On SunOS,
the linker will automatically create a shared library
if the -e option is not used and there are undefined
symbols in the link.
По този въпрос съществуват две мнения. Едното е неправилно, а другото е моето.
Re: еквивалент на DLL в Linux?
Ekvivalenta na dynamic-link library pod Linux sa ".so" files, ili pone taka moje da se zakliuchi ot dokumentaciqta na SUN Java, tyi kato tam ima edin metod "System.loadLibrary(String libraryName)", koito avtomatichno dobavq spored platformata .DLL ili .so extension.
Po prevod ot ruskata literatura.
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Po prevod ot ruskata literatura.
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Re: еквивалент на DLL в Linux?
Както вече ти писаха по-горе, еквивалента на DLL са така наречените "shared objects" или .so файлове. Всички съвременни Unix системи, ползващи ELF обектен формат поддържат такива поделени обекти.
Като компилираш някакъв код с опции -shared -fPIC той автоматично става поделен и позиционно независим и може да се ползва като динамично зареждаема библиотека, която експортира всички нестатични символи.
Можеш да ползваш libdl за работа с динамични библиотеки:
typedef myfunc_returntype (*myfunctype) (myfuncparamtype1 param1, myfuncparamtype2 param2, etc.);
void *handle = dlopen("mylib.so", flags);
myfunctype myfunc = (myfunctype)dlsym(handle, "myfunc");
(*myfunc)(param1, param2, ...);
dlclose(handle);
ГУИ можеш да правиш дотолкова, доколкото динамичните ти библиотеки и програмата, която ги зарежда, ползват еднакви ГУИ туулкитове, иначе става боза. За пример - XMMS, който е GTK+ приложение, спокойно си зарежда плъгини, които са .so файлове, а самите плъгини имат диалози за настройка, за информация и т.н.
"Всички науки са или физика, или колекциониране на пощенски марки." (Е. Ръдърфорд)
Като компилираш някакъв код с опции -shared -fPIC той автоматично става поделен и позиционно независим и може да се ползва като динамично зареждаема библиотека, която експортира всички нестатични символи.
Можеш да ползваш libdl за работа с динамични библиотеки:
typedef myfunc_returntype (*myfunctype) (myfuncparamtype1 param1, myfuncparamtype2 param2, etc.);
void *handle = dlopen("mylib.so", flags);
myfunctype myfunc = (myfunctype)dlsym(handle, "myfunc");
(*myfunc)(param1, param2, ...);
dlclose(handle);
ГУИ можеш да правиш дотолкова, доколкото динамичните ти библиотеки и програмата, която ги зарежда, ползват еднакви ГУИ туулкитове, иначе става боза. За пример - XMMS, който е GTK+ приложение, спокойно си зарежда плъгини, които са .so файлове, а самите плъгини имат диалози за настройка, за информация и т.н.
"Всички науки са или физика, или колекциониране на пощенски марки." (Е. Ръдърфорд)
Само още едно питане
Трябва ли да се слага нещо от сорта на
extern "C" int __export
Пред функцията както е в CBuilder например (добре де не само в него)?
Иначе това е най-страхотния пример - не се бъзикам направо разбрах ако някой ден стигна до там как ще мога да ползвам .so
Bеer? Moooorrre?
extern "C" int __export
Пред функцията както е в CBuilder например (добре де не само в него)?
Иначе това е най-страхотния пример - не се бъзикам направо разбрах ако някой ден стигна до там как ще мога да ползвам .so
Bеer? Moooorrre?
Re: Само още едно питане
Мне, не е необходимо. Ето ти пример:
> cat mylib.c
int testfunc(int a, int b)
{
return a+b;
}
> cat testlib.c
#include <dlfcn.h>
#include <stdio.h>
typedef int (*myfunctype)(int a, int b);
void main(void)
{
void *handle = dlopen("./mylib.so", RTLD_LAZY);
myfunctype myfunc;
if (handle != NULL)
{
myfunc = (myfunctype)dlsym(handle, "testfunc");
if (myfunc != NULL)
printf("testfunc(2,3) = %d\n", (*myfunc)(2,3));
else
perror(dlerror());
}
else
perror(dlerror());
}
> gcc -o mylib.so -shared -fPIC mylib.c
> file mylib.so
mylib.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (FreeBSD), not stripped
> gcc -o testlib testlib.c (на Linux и Solaris следва да се добави и -ldl във FreeBSD функцията е включена в libc)
testlib.c: In function `main':
testlib.c:7: warning: return type of `main' is not `int'
> ./testlib
testfunc(2,3) = 5
Надявам се този пример показва нагледно всичко, което искаш да знаеш.
"Всички науки са или физика, или колекциониране на пощенски марки." (Е. Ръдърфорд)
> cat mylib.c
int testfunc(int a, int b)
{
return a+b;
}
> cat testlib.c
#include <dlfcn.h>
#include <stdio.h>
typedef int (*myfunctype)(int a, int b);
void main(void)
{
void *handle = dlopen("./mylib.so", RTLD_LAZY);
myfunctype myfunc;
if (handle != NULL)
{
myfunc = (myfunctype)dlsym(handle, "testfunc");
if (myfunc != NULL)
printf("testfunc(2,3) = %d\n", (*myfunc)(2,3));
else
perror(dlerror());
}
else
perror(dlerror());
}
> gcc -o mylib.so -shared -fPIC mylib.c
> file mylib.so
mylib.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (FreeBSD), not stripped
> gcc -o testlib testlib.c (на Linux и Solaris следва да се добави и -ldl във FreeBSD функцията е включена в libc)
testlib.c: In function `main':
testlib.c:7: warning: return type of `main' is not `int'
> ./testlib
testfunc(2,3) = 5
Надявам се този пример показва нагледно всичко, което искаш да знаеш.
"Всички науки са или физика, или колекциониране на пощенски марки." (Е. Ръдърфорд)
Много мерси
Ще гледам да намеря малко време и да ги тествам нещата и ще ти пиша.
Имам една две идеи а вече нямам сериозни проблеми да опитам да ги реализирам - освен времето де :(((
Bеer? Moooorrre?
Имам една две идеи а вече нямам сериозни проблеми да опитам да ги реализирам - освен времето де :(((
Bеer? Moooorrre?