Lösung siehe unten
Hi,
ich bin gerade total am ausrasten wegen irgendso einem Linker Problem <_<. Ich will eine dll Datei unter Windows mittles mingw erstellen.
Ich hab auch ne makefile wo ich das alles mal reingeschrieben habe und im Moment halt etwas ausprobiere, deswegen sihet das vllt etwas chaotisch aus:
Alles anzeigen
Meine DiscControl.c inkludiert die SimpleAudioCD.h Datei:
Alles anzeigen
Beim Linken gebe ich ja alle vier .o Dateien an - woran kann das jetzt liegen?? Die Prototypen in SimpleAudioCD.h und SimpleAudioCD.cpp sind identisch!
Bitte helft mir jemand :(!
Lösung:
Musste die Header Datei für C und Cpp deklarieren, also "extern C"
Hi,
ich bin gerade total am ausrasten wegen irgendso einem Linker Problem <_<. Ich will eine dll Datei unter Windows mittles mingw erstellen.
Quellcode
- \music\lib\c_cpp_src>g++ -shared -o libdiscontrollib.dll DiscControl.o SimpleAudioCD.o CAudioCD.o AudioCD_Helpers.o
- DiscControl.o:DiscControl.c:(.text+0x1b): undefined reference to `calcDiscID'
- DiscControl.o:DiscControl.c:(.text+0x44): undefined reference to `eject'
- collect2: ld returned 1 exit status
Ich hab auch ne makefile wo ich das alles mal reingeschrieben habe und im Moment halt etwas ausprobiere, deswegen sihet das vllt etwas chaotisch aus:
Quellcode
- cppc=g++
- cc=gcc
- jc=javac
- jh=javah -jni
- JAVA_HOME="C:\Program Files\Java\jdk1.6.0_24
- jnisl=gcc -shared -Wl -I${JAVA_HOME}\include" -I${JAVA_HOME}\include\win32" -static
- dll: libreadcdidlib.dll
- all: SimpleAudioCD.o CAudioCD.o AudioCD_Helpers.o DiscControl.o
- SimpleAudioCD.o: SimpleAudioCD.cpp SimpleAudioCD.h
- ${cppc} -c SimpleAudioCD.cpp
- CAudioCD.o: CAudioCD.cpp
- ${cppc} -c CAudioCD.cpp -fpermissive
- AudioCD_Helpers.o: AudioCD_Helpers.cpp
- ${cppc} -c AudioCD_Helpers.cpp -fpermissive
- DiscControl.o: DiscControl.c
- ${cc} -c -I"C:\Program Files\Java\jdk1.6.0_24\include" -I"C:\Program Files\Java\jdk1.6.0_24\include\win32" DiscControl.c
- libreadcdidlib.dll: SimpleAudioCD.o CAudioCD.o AudioCD_Helpers.o DiscControl.o
- g++ -shared -o libreadcdidlib.dll DiscControl.o SimpleAudioCD.o CAudioCD.o AudioCD_Helpers.o
Meine DiscControl.c inkludiert die SimpleAudioCD.h Datei:
Quellcode
- #include "SimpleAudioCD.h"
- #include "DiscControl.h"
- #include <stdio.h>
- #include <stdlib.h>
- JNIEXPORT jint JNICALL Java_DiscControl_readCDID(JNIEnv * env, jclass class, jchar dev) {
- jboolean iscopy;
- /* const char *tmpDev = (*env)->GetStringUTFChars(env, dev, 0); */
- char device = dev;
- unsigned long discID = calcDiscID(device);
- return discID;
- }
- JNIEXPORT void JNICALL Java_DiscControl_ejectDrive(JNIEnv *env, jclass class, jchar dev) {
- /* const char *tmpDev = (*env)->GetStringUTFChars(env, dev, 0); */
- char device = dev;
- eject(device);
- }
- JNIEXPORT jboolean JNICALL Java_DiscControl_extractTracks(JNIEnv *env, jclass class, jstring path, jchar dev) {
- return 0;
- }
Beim Linken gebe ich ja alle vier .o Dateien an - woran kann das jetzt liegen?? Die Prototypen in SimpleAudioCD.h und SimpleAudioCD.cpp sind identisch!
Bitte helft mir jemand :(!
Lösung:
Musste die Header Datei für C und Cpp deklarieren, also "extern C"