Napisałem kilka programików z użyciem biblioteki nodave (dostęp do PLC) http://libnodave.sourceforge.net/
Zamarzyło mi się by napisać opakowanie do tej biblioteki. Czyli napisać własną bibliotekę i podlinkować statycznie nodave (musiało by to być do użytku na windows).
Mój problem zaczął się w momencie gdy zobaczyłem skrypty makefile. \
1. nie ma skryptu pod mingw
2. nie ma configure.
Stąd moje pytanie. Jak przerobić skrypt makefile linuxowy(najbliższy mingw), tak by skompilował bibliotekę (najlepiej do linkowania statycznego pod windowsem)
Najpierw wrzucę skrypt oryginalny dla visuala
https://wklej.to/TMtwCteraz oryginalny skrypt dla dla linuxa który to chciałbym jakoś przerobić gdyż wydaje się najlepiej pasować do mingw
https://wklej.to/XXjW3Dodam, że nie zależy mi na kompilacji przykładów tylko samej biblioteki. Chciałbym by była zdolna do linkowania statycznego (o ile to możliwe)
Wymodziłem coś takiego metodą prób i błędów. I nawet coś buduje. Jednak podmianka dllki w działającym programie wywala błędy typu "nie znaleziono pukntu wejścia do procedury"
A próba re-kompilacji programu przez statyczne dołączenie kończy się komunikatem kompilatora "undefined reference".
(i sam naprawdę nie wiem czy to wina niumięjętnego linkowania czy źle zbudowanej biblioteki. Choć podejrzewam, że to drugie)
CFLAGS= -c -Wall -Winline -DBCCWIN -DDAVE_LITTLE_ENDIAN -fPIC
LIBRARIES=libnodave.dll libnodave.a
CFLAGS_DLL = -Wall -O0 -g -shared -Wl,
LIBS= -lwsock32
all: $(LIBRARIES)
libnodave.a: nodave.o setportw.o openSocketw.o openS7online.o
ar -rcs $@ $^
libnodave.dll: nodave.o setportw.o openSocketw.o openS7online.o
$(CC) -o $@ $(CFLAGS_DLL) $^ $(LIBS)
clean:
rm -f *.a
rm -f *.o
rm -f *.dll
nodave.o: nodave.h log2.h
openSocket.o: openSocket.h nodave.h log2.h
oto jaki makefile wykombinowałem:
komendą "ar" chciałem zbudować bibliotekę do linkowania statycznego . Nie wiem czy to dobrze?? i prawdę mówiąc nie bardzo wiem czym się różni plik z rozszerzeniem "*.lib" od "*.a"
poniżej tego jest moja próba zbudoania dll z obiektów: nodave.o, setportw.o, openSocketw.o, openS7online.o
Coś tam się buduje ale z działaniem jest gorzej :)