Linker Problem

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 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.

    Quellcode

    1. \music\lib\c_cpp_src>g++ -shared -o libdiscontrollib.dll DiscControl.o SimpleAudioCD.o CAudioCD.o AudioCD_Helpers.o
    2. DiscControl.o:DiscControl.c:(.text+0x1b): undefined reference to `calcDiscID'
    3. DiscControl.o:DiscControl.c:(.text+0x44): undefined reference to `eject'
    4. 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

    1. cppc=g++
    2. cc=gcc
    3. jc=javac
    4. jh=javah -jni
    5. JAVA_HOME="C:\Program Files\Java\jdk1.6.0_24
    6. jnisl=gcc -shared -Wl -I${JAVA_HOME}\include" -I${JAVA_HOME}\include\win32" -static
    7. dll: libreadcdidlib.dll
    8. all: SimpleAudioCD.o CAudioCD.o AudioCD_Helpers.o DiscControl.o
    9. SimpleAudioCD.o: SimpleAudioCD.cpp SimpleAudioCD.h
    10. ${cppc} -c SimpleAudioCD.cpp
    11. CAudioCD.o: CAudioCD.cpp
    12. ${cppc} -c CAudioCD.cpp -fpermissive
    13. AudioCD_Helpers.o: AudioCD_Helpers.cpp
    14. ${cppc} -c AudioCD_Helpers.cpp -fpermissive
    15. DiscControl.o: DiscControl.c
    16. ${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
    17. libreadcdidlib.dll: SimpleAudioCD.o CAudioCD.o AudioCD_Helpers.o DiscControl.o
    18. g++ -shared -o libreadcdidlib.dll DiscControl.o SimpleAudioCD.o CAudioCD.o AudioCD_Helpers.o
    Alles anzeigen



    Meine DiscControl.c inkludiert die SimpleAudioCD.h Datei:

    Quellcode

    1. #include "SimpleAudioCD.h"
    2. #include "DiscControl.h"
    3. #include <stdio.h>
    4. #include <stdlib.h>
    5. JNIEXPORT jint JNICALL Java_DiscControl_readCDID(JNIEnv * env, jclass class, jchar dev) {
    6. jboolean iscopy;
    7. /* const char *tmpDev = (*env)->GetStringUTFChars(env, dev, 0); */
    8. char device = dev;
    9. unsigned long discID = calcDiscID(device);
    10. return discID;
    11. }
    12. JNIEXPORT void JNICALL Java_DiscControl_ejectDrive(JNIEnv *env, jclass class, jchar dev) {
    13. /* const char *tmpDev = (*env)->GetStringUTFChars(env, dev, 0); */
    14. char device = dev;
    15. eject(device);
    16. }
    17. JNIEXPORT jboolean JNICALL Java_DiscControl_extractTracks(JNIEnv *env, jclass class, jstring path, jchar dev) {
    18. return 0;
    19. }
    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"