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.
|
Source code
|
1
2
3
4
|
\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:
|
Source code
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
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:
|
C/C++ Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#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"