2024-05-18 22:14 AEST

View Issue Details Jump to Notes ]
IDProjectCategoryView StatusLast Update
0000332mercuryBugpublic2014-07-10 14:06
Reporterlpimmes 
Assigned To 
PriorityurgentSeveritymajorReproducibilityalways
StatusclosedResolutionno change required 
PlatformOSXOS10.9OS Version
Product Version 
Target VersionFixed in Version 
Summary0000332: Cannot find symbols in lpiUtil.jar
Description#Problem: compiling formalLang_lib.m with ../lpiUtil/lpiUtil.m in the JAVA grade.

# formalLang.m, a wrapper around formalLang_lib.m, and lpiUtil.m is working fine.
# We have a similar Makefile for building mercury code-- working immediately below:
#formalLang 548>./formalLang aabb
#A^nB^n --> aabb
#formalLang 548>./formalLang aab
#Failed to parse input sentence.

# We need to tell javac about the Mercury libraries.
UTILPATH = ../lpiUtil
#lpiUtil 527>mmc --make -s java liblpiUtil
# creates
# lpiUtil.jar

See steps below to reproduce.
Thanks for your time.
Steps To ReproducePart of a larger makefile: Makefile_formalLang_lib_jar (see attached).

formalLang 549>make -f Makefile_formalLang_lib_jar libformalLang_lib.jar
mmc --grade java --make libformalLang_lib \
    --search-lib-files-dir . \
    --init-file formalLang_lib.init \
    --link-object libformalLang_lib.a \
    --search-lib-files-dir ../lpiUtil \
    --link-object ../lpiUtil/liblpiUtil.a \
    --init-file ../lpiUtil/lpiUtil.init
Making Mercury/javas/jmercury/formalLang_lib.java
Making Java class files
Mercury/javas/jmercury/formalLang_lib.java:436: error: cannot find symbol
        InputLst_5 = lpiUtil.strToLst_2_p_0(InputStr_3);
                     ^
  symbol: variable lpiUtil
  location: class formalLang_lib
Mercury/javas/jmercury/formalLang_lib.java:443: error: cannot find symbol
        java.lang.Object [] result = lpiUtil.oneOrMoreLst_4_p_0(V_31_31, InputLst_5);
                                     ^
Additional Information
# How to get lpiUtil.jar included in this part?
# Or do I just use the *.a and *.init files from mercury?
TagsNo tags attached.
Attached Files
  • ? file icon Makefile_formalLang_lib_jar (1,590 bytes) 2014-06-07 03:18 -
    #-----------------------------------------------------------------------------#
    # This source file is hereby placed in the public domain.
    #-----------------------------------------------------------------------------#
    # Test with mercury_main.m
    
    # formalLang.m, a wrapper around formalLang_lib.m, and lpiUtil.m is working fine.
    # We have a similar Makefile for building mercury code-- working.
    #formalLang 548>./formalLang aabb
    #A^nB^n -->  aabb
    #formalLang 548>./formalLang aab
    #Failed to parse input sentence.
    
    # We need to tell javac about the Mercury libraries.
    UTILPATH = ../lpiUtil
    #lpiUtil 527>mmc --make -s java liblpiUtil
    # creates	 
    # 		 lpiUtil.jar
    GRADE = java
    MER_LIB_DIR = $(dir $(shell which mmc))../lib/mercury/lib/$(GRADE)
    MER_JARS = $(MER_LIB_DIR)/mer_std.jar:$(MER_LIB_DIR)/mer_rt.jar
    
    .PHONY: all
    all: mercury_main
    
    mercury_main: mercury_main.m my_package/JavaMain.class
    	mmc --grade $(GRADE) --make mercury_main --java-classpath .
    
    my_package/JavaMain.class: JavaMain.java libformalLang_lib.jar
    	javac JavaMain.java -cp $(UITLPATH)/lpiUtil.jar:$(MER_JARS):Mercury/classs -d .
    
    # How to get lpiUtil.jar included in this part?
    # Or do I just use the *.a and *.init files from mercury?
    libformalLang_lib.jar:
    	mmc --grade $(GRADE) --make libformalLang_lib \
    	--search-lib-files-dir . \
    	--init-file formalLang_lib.init \
    	--link-object libformalLang_lib.a \
    	--search-lib-files-dir $(UTILPATH) \
    	--link-object $(UTILPATH)/liblpiUtil.a \
    	--init-file $(UTILPATH)/lpiUtil.init
    
    .PHONY: clean
    clean:
    	$(RM) mercury_main formalLang_lib.jar *.err
    	$(RM) -r Mercury my_package
    
    ? file icon Makefile_formalLang_lib_jar (1,590 bytes) 2014-06-07 03:18 +

-Relationships
+Relationships

-Notes

~0000699

wangp (developer)

The error is because the Java compiler cannot find lpiUtil. You may need to use the mmc --java-classpath option. Use mmc -v to see the actual javac command.

I don't understand why you are trying to link with a .a file, which (normally) contains native code.

~0000736

lpimmes (reporter)

You were correct, --java-classpath $CLASSPATH and -v option solved the problem; no need for
native code (.a).
Thanks; working code below:
formalLang 507>make -f Makefile_formalLang_lib_jar
...

formalLang 507>./mercury_main
In Mercury main, about to call java_main...
In java_main()...
abc, one_parse() gives value = A^nB^nC^n --> abc
ab, one_parse() gives value = A^nB^n --> ab
b, one_parse() gives value = Failed to parse input sentence.
a, one_parse() gives value = Failed to parse input sentence.
aabb, one_parse() gives value = A^nB^n --> aabb
aaabb, one_parse() gives value = Failed to parse input sentence.
aaaabbb, one_parse() gives value = Failed to parse input sentence.
aaabbb, one_parse() gives value = A^nB^n --> aaabbb
aaabb, one_parse() gives value = Failed to parse input sentence.
Returning from java_main()
Back in Mercury main.
formalLang 507>
+Notes

-Issue History
Date Modified Username Field Change
2014-06-07 03:18 lpimmes New Issue
2014-06-07 03:18 lpimmes File Added: Makefile_formalLang_lib_jar
2014-06-15 12:19 wangp Note Added: 0000699
2014-07-06 02:05 lpimmes Note Added: 0000736
2014-07-10 14:06 wangp Status new => closed
2014-07-10 14:06 wangp Resolution open => no change required
+Issue History