A gcj nem látja a helyi include könyvtárat?

Fórumok

Szeretnék fordítani a gcj-vel. A könyvtárfa így néz ki:


./include-cni/
              usb/
                  linux/DeviceImpl.h
                        USBException.h
                        .....
./native/
         linux.cc

A parancssor és a válaszul kapott szöveg itt van:


$ gcj -g -O -Iinclude-cni -c native/linux.cc -o native/linux.o

cc1plus: warning: command line option "-fbootclasspath=include-cni/:./:/usr/share/java/libgcj-4.4.5.jar" is valid for Java but not for C++
native/linux.cc:53:34: error: usb/linux/DeviceImpl.h: Nincs ilyen fájl vagy könyvtár
native/linux.cc:54:36: error: usb/linux/USBException.h: Nincs ilyen fájl vagy könyvtár
native/linux.cc:84: error: ‘usb’ has not been declared
native/linux.cc:131: error: ‘usb’ has not been declared
	.
	.
	.
	.

Képtelenség, hiszen ott van a szájában az include-cni könyvtár. Kipróbáltam a c++ programmal is.


$ c++ -O -Iinclude-cni -c native/linux.cc -o native/linux.o

Semmi baja nincs és a native/linux.o állomány is készen van. Akkor gcj miért nem látja - vagy miért nem adja tovább a gcc-nek - az include-cni könyvtárat és a tartalmát?

Hozzászólások

Rakj hozzá egy --verbose-t, és nézd meg, mit is hív meg és hogyan.

A c++ parancssora és a válasz:


$ c++ --verbose -O -Iinclude-cni -c native/linux.cc -o native/linux.o

Using built-in specs.
Target: i686-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch=i686 --build=i686-redhat-linux
Thread model: posix
gcc version 4.4.5 20101112 (Red Hat 4.4.5-2) (GCC) 
COLLECT_GCC_OPTIONS='-v' '-O' '-Iinclude-cni' '-c' '-E' '-shared-libgcc' '-mtune=generic' '-march=i686'
 /usr/libexec/gcc/i686-redhat-linux/4.4.5/cc1plus -E -quiet -v -Iinclude-cni -D_GNU_SOURCE native/linux.cc -mtune=generic -march=i686 -O
ignoring nonexistent directory "/usr/lib/gcc/i686-redhat-linux/4.4.5/include-fixed"
ignoring nonexistent directory "/usr/lib/gcc/i686-redhat-linux/4.4.5/../../../../i686-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 include-cni
 /usr/lib/gcc/i686-redhat-linux/4.4.5/../../../../include/c++/4.4.5
 /usr/lib/gcc/i686-redhat-linux/4.4.5/../../../../include/c++/4.4.5/i686-redhat-linux
 /usr/lib/gcc/i686-redhat-linux/4.4.5/../../../../include/c++/4.4.5/backward
 /usr/local/include
 /usr/lib/gcc/i686-redhat-linux/4.4.5/include
 /usr/include
End of search list.
COMPILER_PATH=/usr/libexec/gcc/i686-redhat-linux/4.4.5/:/usr/libexec/gcc/i686-redhat-linux/4.4.5/:/usr/libexec/gcc/i686-redhat-linux/:/usr/lib/gcc/i686-redhat-linux/4.4.5/:/usr/lib/gcc/i686-redhat-linux/:/usr/libexec/gcc/i686-redhat-linux/4.4.5/:/usr/libexec/gcc/i686-redhat-linux/:/usr/lib/gcc/i686-redhat-linux/4.4.5/:/usr/lib/gcc/i686-redhat-linux/
LIBRARY_PATH=/usr/lib/gcc/i686-redhat-linux/4.4.5/:/usr/lib/gcc/i686-redhat-linux/4.4.5/:/usr/lib/gcc/i686-redhat-linux/4.4.5/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-O' '-Iinclude-cni' '-c' '-E' '-shared-libgcc' '-mtune=generic' '-march=i686'
Using built-in specs.
Target: i686-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch=i686 --build=i686-redhat-linux
Thread model: posix
gcc version 4.4.5 20101112 (Red Hat 4.4.5-2) (GCC) 
COLLECT_GCC_OPTIONS='-v' '-O' '-Iinclude-cni' '-c' '-o' '/home/prog/.ccache/tmp.hash.localhost.localdomain.3095.o' '-shared-libgcc' '-mtune=generic' '-march=i686'
 /usr/libexec/gcc/i686-redhat-linux/4.4.5/cc1plus -fpreprocessed /home/prog/.ccache/linux.tmp.localhost.localdomain.3095.ii -quiet -dumpbase linux.tmp.localhost.localdomain.3095.ii -mtune=generic -march=i686 -auxbase-strip /home/prog/.ccache/tmp.hash.localhost.localdomain.3095.o -O -version -o /home/prog/tmp/ccVouPHj.s
GNU C++ (GCC) version 4.4.5 20101112 (Red Hat 4.4.5-2) (i686-redhat-linux)
	compiled by GNU C version 4.4.5 20101112 (Red Hat 4.4.5-2), GMP version 4.3.1, MPFR version 2.4.2.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 72cd5f58bbb77be6a2c34ee0ea711c44
native/linux.cc: In static member function ‘static jint usb::linux::DeviceImpl::readIntr(jint, jint, JArray<__java_byte>*, jint, jint)’:
native/linux.cc:199: warning: deprecated conversion from string constant to ‘char*’
native/linux.cc: In static member function ‘static jint usb::linux::DeviceImpl::writeIntr(jint, jint, JArray<__java_byte>*, jint, jint)’:
native/linux.cc:206: warning: deprecated conversion from string constant to ‘char*’
COLLECT_GCC_OPTIONS='-v' '-O' '-Iinclude-cni' '-c' '-o' '/home/prog/.ccache/tmp.hash.localhost.localdomain.3095.o' '-shared-libgcc' '-mtune=generic' '-march=i686'
 as -V -Qy -o /home/prog/.ccache/tmp.hash.localhost.localdomain.3095.o /home/prog/tmp/ccVouPHj.s
GNU assembler version 2.20.51.0.2 (i686-redhat-linux) using BFD version version 2.20.51.0.2-20.fc13 20091009
COMPILER_PATH=/usr/libexec/gcc/i686-redhat-linux/4.4.5/:/usr/libexec/gcc/i686-redhat-linux/4.4.5/:/usr/libexec/gcc/i686-redhat-linux/:/usr/lib/gcc/i686-redhat-linux/4.4.5/:/usr/lib/gcc/i686-redhat-linux/:/usr/libexec/gcc/i686-redhat-linux/4.4.5/:/usr/libexec/gcc/i686-redhat-linux/:/usr/lib/gcc/i686-redhat-linux/4.4.5/:/usr/lib/gcc/i686-redhat-linux/
LIBRARY_PATH=/usr/lib/gcc/i686-redhat-linux/4.4.5/:/usr/lib/gcc/i686-redhat-linux/4.4.5/:/usr/lib/gcc/i686-redhat-linux/4.4.5/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-O' '-Iinclude-cni' '-c' '-o' '/home/prog/.ccache/tmp.hash.localhost.localdomain.3095.o' '-shared-libgcc' '-mtune=generic' '-march=i686'

A fordítás most is sikeres.

A gcj parancssora és a válasz:


$ gcj --verbose -g -O -Iinclude-cni -c native/linux.cc -o native/linux.o

Using built-in specs.
Reading specs from /usr/lib/gcc/i686-redhat-linux/4.4.5/libgcj.spec
rename spec startfile to startfileorig
rename spec lib to liborig
Target: i686-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch=i686 --build=i686-redhat-linux
Thread model: posix
gcc version 4.4.5 20101112 (Red Hat 4.4.5-2) (GCC) 
COLLECT_GCC_OPTIONS='-v' '-g' '-O' '-c' '-o' 'native/linux.o' '-fbootclasspath=include-cni/:./:/usr/share/java/libgcj-4.4.5.jar' '-shared-libgcc' '-mtune=generic' '-march=i686'
 /usr/libexec/gcc/i686-redhat-linux/4.4.5/cc1plus -quiet -v -D_GNU_SOURCE native/linux.cc -quiet -dumpbase linux.cc -mtune=generic -march=i686 -auxbase-strip native/linux.o -g -O -version -fbootclasspath=include-cni/:./:/usr/share/java/libgcj-4.4.5.jar -o /home/prog/tmp/cclP4Qkv.s
cc1plus: warning: command line option "-fbootclasspath=include-cni/:./:/usr/share/java/libgcj-4.4.5.jar" is valid for Java but not for C++
ignoring nonexistent directory "/usr/lib/gcc/i686-redhat-linux/4.4.5/include-fixed"
ignoring nonexistent directory "/usr/lib/gcc/i686-redhat-linux/4.4.5/../../../../i686-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/i686-redhat-linux/4.4.5/../../../../include/c++/4.4.5
 /usr/lib/gcc/i686-redhat-linux/4.4.5/../../../../include/c++/4.4.5/i686-redhat-linux
 /usr/lib/gcc/i686-redhat-linux/4.4.5/../../../../include/c++/4.4.5/backward
 /usr/local/include
 /usr/lib/gcc/i686-redhat-linux/4.4.5/include
 /usr/include
End of search list.
GNU C++ (GCC) version 4.4.5 20101112 (Red Hat 4.4.5-2) (i686-redhat-linux)
	compiled by GNU C version 4.4.5 20101112 (Red Hat 4.4.5-2), GMP version 4.3.1, MPFR version 2.4.2.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 72cd5f58bbb77be6a2c34ee0ea711c44
native/linux.cc:53:34: error: usb/linux/DeviceImpl.h: Nincs ilyen fájl vagy könyvtár
native/linux.cc:54:36: error: usb/linux/USBException.h: Nincs ilyen fájl vagy könyvtár
native/linux.cc:84: error: ‘usb’ has not been declared
native/linux.cc:131: error: ‘usb’ has not been declared
         .
         .
         .

A "COLLECT_GCC_OPTIONS=" sorból hiányzik az -Iinclude-cni. Lenyeli, de miért? A "-fbootclasspath=include-cni/" részlet mutatja ugyan, de semmit sem használ. A figyelmeztetés miatt az egészet eldobja?

Ez egy más által írt programcsomag amit tovább akarok fejleszteni. Az illető így készítette el. A gcj-t még sosem használtam. Most muszáj belekóstolnom mert java alól kell USB-s eszközöket elérni. Egyelőre PC-n próbálgatom aztán Android-2.2-re szeretném végezni a fejlesztést.

Egyelőre annyit akarok elérni hogy meglegyen a java-USB kapcsolat. Közben botlottam bele a gcj furcsaságába. Föltételeztem hogy az eredeti szerzőnek működött a dolog és nem értettem hogy nekem miért nem. Egy táblagép lesz a cél. Természetesen oda az androidos fejlesztőkészlettel szándékozom programot készíteni. A java-USB kapcsolatot még PC-n szeretném összehozni hogy az Androidon ezzel már ne kelljen vesződni. Ha PC-n jó akkor átviszem a cél környezetbe ahol egy program kiegészítője lesz. Android-2.2-re nincs USB eszköz illesztő ezért kell kerülő megoldást választanom.

Nem akartam a gcj-vel vesződni és nem is áll szándékomban, csak az eredeti forrást szerettem volna lefordítani úgy ahogy volt ismeretszerzési céllal. Van egy "make gcj-native" lehetőség is és itt találkoztam a problémával. Ez tulajdonképpen egy mellékszál. Azért kérdeztem meg mert nem akartam hülyén meghalni. :-)

Ahha! Ez tiszteletreméltó. Én úgy csinálnám, hogy a c fordítás részét gcc-vel, a javát gcj-vel, és átadnám a c fordítás .o-it (nem tudom, működik-e, de szerintem kéne neki).

Amúgy azt hallottam (és kicsit láttam is), a gcj-nek eléggé rozoga a Java-támogatása (gondolok itt awt, meg swing meg ilyenekre), tapasztalatom szerint még lassú is. És az openjdk megjelenésével nem is annyira hangsúlyos projekt.