You are not logged in.

  • Login

1

Thursday, June 30th 2011, 9:41pm

Linker Problem

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"

Social bookmarks