我有一个makefile,它执行以下操作:
all:
CLASSPATH=$(SELF)/RT/real:$(SELF)/RT/fake:$(SELF)/RT/fake/uj javac $(SELF)/RT/real/java/lang/*.java
CLASSPATH=$(SELF)/RT/real:$(SELF)/RT/fake:$(SELF)/RT/fake/uj javac $(DIR)/Components/UJ*.java
find $(SELF)/RT/real -iname "*.class" -type f >> $(SELF)/files
find $(DIR)/Components -iname "UJCmp.class" -type f >> $(SELF)/files
$(foreach C, $(shell echo $(CLASSES) | tr ',' ' '), \
CLASSPATH=$(SELF)/RT/real:$(SELF)/RT/fake:$(SELF)/RT/fake/uj \
javac $(DIR)/Components/UJ*.java $(DIR)/Components/$(C).java && \
find $(DIR)/Components -iname "$(C).class" >> $(SELF)/files && \
) true
cat $(SELF)/files | xargs $(CMD) >$(OUT)
但是在终端中产生以下输出:
make -C /home/sven/git/uJVM_PhD_Project/UPNP/micropnp-contiki/build/../../uJ//BUILDENV DIR=../../uJ CCVT=../../classCvt/classCvt TOBIN=../../classCvt/tobin CLASSES= OUTPUT=__code.c
make[1]: Entering directory '/home/sven/git/uJVM_PhD_Project/UPNP/uJ/BUILDENV'
CLASSPATH=/home/sven/git/uJVM_PhD_Project/UPNP/uJ/BUILDENV//RT/real:/home/sven/git/uJVM_PhD_Project/UPNP/uJ/BUILDENV//RT/fake:/home/sven/git/uJVM_PhD_Project/UPNP/uJ/BUILDENV//RT/fake/uj javac /home/sven/git/uJVM_PhD_Project/UPNP/uJ/BUILDENV//RT/real/java/lang/*.java
CLASSPATH=/home/sven/git/uJVM_PhD_Project/UPNP/uJ/BUILDENV//RT/real:/home/sven/git/uJVM_PhD_Project/UPNP/uJ/BUILDENV//RT/fake:/home/sven/git/uJVM_PhD_Project/UPNP/uJ/BUILDENV//RT/fake/uj javac ../../uJ/Components/UJ*.java
../../uJ/Components/UJCmp.java:81: error: cannot find symbol
int L1 = res_name.Xlen_();
^
symbol: method Xlen_()
location: variable res_name of type String
../../uJ/Components/UJCmp.java:82: error: cannot find symbol
int L2 = method_name.Xlen_();
^
symbol: method Xlen_()
location: variable method_name of type String
../../uJ/Components/UJCmp.java:86: error: cannot find symbol
b1[i] = ((byte)res_name.XbyteAt_(i));
^
symbol: method XbyteAt_(int)
location: variable res_name of type String
../../uJ/Components/UJCmp.java:89: error: cannot find symbol
b2[i] = ((byte)method_name.XbyteAt_(i));
^
symbol: method XbyteAt_(int)
location: variable method_name of type String
../../uJ/Components/UJCmp.java:101: error: cannot find symbol
int i, L = s.Xlen_(); //we cheat by not calling string methods - they are slow
^
symbol: method Xlen_()
location: variable s of type String
../../uJ/Components/UJCmp.java:102: error: cannot find symbol
for(i = 0; i < L; i++) uj.lang.RT.consolePut((char)s.XbyteAt_(i));
^
symbol: method XbyteAt_(int)
location: variable s of type String
6 errors
Makefile:49: recipe for target 'all' failed
make[1]: *** [all] Error 1
make[1]: Leaving directory '/home/sven/git/uJVM_PhD_Project/UPNP/uJ/BUILDENV'
../../uJ/Makefile.include:93: recipe for target '__code.c' failed
奇怪的是,符号.Xlen_()和其他符号包含在&#34; / home / sven / git / uJVM_PhD_Project / UPNP / uJ / BUILDENV / RT / fake / uj / lang中的.java文件中/MiniString.java" (并且是公开的)。 因此,在尝试编译UJCmp.java时,我认为它包含在类路径中。所以我不知道它为什么会产生这个错误。
我错过了什么?
编辑:我有一个相当奇怪的设置并覆盖默认的String类。 我也会在这里发布MiniString和String的源代码:
String.java位于&#34; /home/sven/git/uJVM_PhD_Project/UPNP/uJ/BUILDENV/RT/real/java/lang/String.java"和代码:
package java.lang;
import uj.lang。*;
public class String extends MiniString {
public String(byte[] bytes){ //our constructor for raw bytes
super(bytes);
}
}
MiniString.java位于&#34; /home/sven/git/uJVM_PhD_Project/UPNP/uJ/BUILDENV/RT/fake/uj/lang/MiniString.java"和代码:
package uj.lang;
public class MiniString{
public static String Xnew_(byte[] bytes){
return new String(bytes);
}
public byte XbyteAt_(int loc){
return 0;
}
public int Xlen_(){
return 0;
}
public MiniString(byte[] bytes){}
public int length(){
return 0;
}
public char charAt(int pos){
return 0;
}
}