• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EST 02:15
CET 08:15
KST 16:15
  • Home
  • Forum
  • Calendar
  • Streams
  • Liquipedia
  • Features
  • Store
  • EPT
  • TL+
  • StarCraft 2
  • Brood War
  • Smash
  • Heroes
  • Counter-Strike
  • Overwatch
  • Liquibet
  • Fantasy StarCraft
  • TLPD
  • StarCraft 2
  • Brood War
  • Blogs
Forum Sidebar
Events/Features
News
Featured News
Behind the Blue - Team Liquid History Book13Clem wins HomeStory Cup 289HomeStory Cup 28 - Info & Preview13Rongyi Cup S3 - Preview & Info8herO wins SC2 All-Star Invitational14
Community News
LiuLi Cup: 2025 Grand Finals (Feb 10-16)1Weekly Cups (Feb 2-8): Classic, Solar, MaxPax win2Nexon's StarCraft game could be FPS, led by UMS maker7PIG STY FESTIVAL 7.0! (19 Feb - 1 Mar)11Weekly Cups (Jan 26-Feb 1): herO, Clem, ByuN, Classic win2
StarCraft 2
General
Rongyi Cup S3 - Preview & Info Behind the Blue - Team Liquid History Book Nexon's StarCraft game could be FPS, led by UMS maker Terran Scanner Sweep How do you think the 5.0.15 balance patch (Oct 2025) for StarCraft II has affected the game?
Tourneys
PIG STY FESTIVAL 7.0! (19 Feb - 1 Mar) LiuLi Cup: 2025 Grand Finals (Feb 10-16) Sparkling Tuna Cup - Weekly Open Tournament RSL Season 4 announced for March-April WardiTV Mondays
Strategy
Custom Maps
Map Editor closed ? [A] Starcraft Sound Mod
External Content
Mutation # 512 Overclocked The PondCast: SC2 News & Results Mutation # 511 Temple of Rebirth Mutation # 510 Safety Violation
Brood War
General
Gypsy to Korea [ASL21] Potential Map Candidates BGH Auto Balance -> http://bghmmr.eu/ BW General Discussion Liquipedia.net NEEDS editors for Brood War
Tourneys
[Megathread] Daily Proleagues Escore Tournament StarCraft Season 1 Small VOD Thread 2.0 KCM Race Survival 2026 Season 1
Strategy
Fighting Spirit mining rates Zealot bombing is no longer popular? Simple Questions, Simple Answers Current Meta
Other Games
General Games
Nintendo Switch Thread Diablo 2 thread Battle Aces/David Kim RTS Megathread ZeroSpace Megathread EVE Corporation
Dota 2
Official 'what is Dota anymore' discussion
League of Legends
Heroes of the Storm
Simple Questions, Simple Answers Heroes of the Storm 2.0
Hearthstone
Deck construction bug Heroes of StarCraft mini-set
TL Mafia
Mafia Game Mode Feedback/Ideas Vanilla Mini Mafia TL Mafia Community Thread
Community
General
YouTube Thread US Politics Mega-thread Sex and weight loss Russo-Ukrainian War Thread The Games Industry And ATVI
Fan Clubs
The herO Fan Club! The IdrA Fan Club
Media & Entertainment
Anime Discussion Thread [Manga] One Piece
Sports
2024 - 2026 Football Thread
World Cup 2022
Tech Support
TL Community
The Automated Ban List
Blogs
Play, Watch, Drink: Esports …
TrAiDoS
My 2025 Magic: The Gathering…
DARKING
Life Update and thoughts.
FuDDx
How do archons sleep?
8882
StarCraft improvement
iopq
Customize Sidebar...

Website Feedback

Closed Threads



Active: 2030 users

Computer Programming, compiling a shared library

Blogs > Zortch
Post a Reply
Zortch
Profile Blog Joined January 2008
Canada635 Posts
May 15 2008 15:59 GMT
#1
Hey, so I'm a math student working on a computer program.
I've got to call some C methods from my java code so I'm working on learning some basic JNI(java native interface).

I am working on Fedora.
I'm putting together the very simple HelloWorld program for starters.
I'm following along exactly with the book.
Java code is written fine, C code is written fine.
Now I need to compile HelloWorld.c into libHelloWorld.so but the book only gives commands to do this for Solaris and Win32. I tried the Solaris command but it didn't work.
The command given is:
cc -G -I/java/include -I/java/include/solaris HelloWorld.c -o libHelloWorld.so

The message I get is:
cc: unrecognized option '-G'
HelloWorld.c:5: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void’
HelloWorld.c:8: error: stray ‘\’ in program
HelloWorld.c:8: error: missing terminating " character

If anyone has any idea of the proper command or what I'm doing wrong I'd appreaciate it, Thanks!


*****
Respect is everything. ~ARchon
haduken
Profile Blog Joined April 2003
Australia8267 Posts
May 15 2008 16:05 GMT
#2
type: man cc
and look up for an option that does what you want.

dunno really...
going to sleep now, but just by looking at your problem for a few secs, it appears you are trying to
access something on solaris (a sun OS which has good java support) on fedora, a typical linux machine.

try dig around sun forum and see if they have something that you can install.
Rillanon.au
haduken
Profile Blog Joined April 2003
Australia8267 Posts
May 15 2008 16:22 GMT
#3
google says that JNI has platform dependencies....
have a look at this page
http://depth-first.com/articles/2006/10/16/compiling-c-to-java-bytecode

i'm guessing you have to change the -I/java/include -I/java/include/solaris into whatever java you got on your fedora...
Rillanon.au
zdd
Profile Blog Joined October 2004
1463 Posts
May 15 2008 16:30 GMT
#4
looks like your cc binary wasn't compiled with the proper flags. did you compile it from source or are you using a pre-built package?
All you need in life is a strong will to succeed and unrelenting determination. If you meet these prerequisites, you can become anything you want with absolutely no luck, fortune or natural ability.
Zortch
Profile Blog Joined January 2008
Canada635 Posts
May 15 2008 16:36 GMT
#5
zdd:
Ok well I don't really understand what you just said, but I assume you're talking about my fedora setup? I didn't set up anything on this computer if that is what you are asking.
Sorry for my lack of knowledge heh, I'm not really a comp sci student.

haduken:
Thanks for the advice, I'll look into it ^^
Respect is everything. ~ARchon
zdd
Profile Blog Joined October 2004
1463 Posts
Last Edited: 2008-05-15 16:45:16
May 15 2008 16:44 GMT
#6
On May 16 2008 01:36 Zortch wrote:
zdd:
Ok well I don't really understand what you just said, but I assume you're talking about my fedora setup? I didn't set up anything on this computer if that is what you are asking.
Sorry for my lack of knowledge heh, I'm not really a comp sci student.

haduken:
Thanks for the advice, I'll look into it ^^

generally "unrecognized option" in the output means that the program does not support the function you are trying to make it perform, because someone explicitly specified it at compile time by not setting a "flag" to the compiler that made your "cc" program, or the function has a different parameter than the one you are used to. so the -G is not supported by your cc, and since you are probably using the pre-built fedora cc package, I would recommend rebuilding cc from the source code with the flag for whatever feature "-G" is enabled, or finding out if the feature has to be called with a different parameter other than -G.
All you need in life is a strong will to succeed and unrelenting determination. If you meet these prerequisites, you can become anything you want with absolutely no luck, fortune or natural ability.
CTStalker
Profile Blog Joined November 2004
Canada9720 Posts
May 15 2008 16:46 GMT
#7
some very smart people i've worked with have told me that JNI is one the hardest APIs around to learn, so goodluck. I've only got minimal experience with it, so I'm not any help. sorry
By the way, my name is Funk. I am not of your world
omgbnetsux
Profile Blog Joined April 2004
United States3749 Posts
May 15 2008 16:49 GMT
#8
On May 16 2008 01:46 CTStalker wrote:
some very smart people i've worked with have told me that JNI is one the hardest APIs around to learn, so goodluck. I've only got minimal experience with it, so I'm not any help. sorry

JNI is nasty indeed. I won't even touch it.

Godspeed. Google, google, google.
FreeZEternal
Profile Joined January 2003
Korea (South)3396 Posts
May 15 2008 16:50 GMT
#9
Yeap it's very hard because you make a mistake in your C code and you will get huge native stack trace that will kill your JVM.
Zortch
Profile Blog Joined January 2008
Canada635 Posts
May 15 2008 16:50 GMT
#10
Heh, thanks guys.
The worst part is, JNI isn't even the problem...yet xD
Respect is everything. ~ARchon
borg
Profile Joined September 2005
171 Posts
May 15 2008 20:36 GMT
#11
hi there, lemme try to shed some light on this.

first of all, unix (solaris) isnt linux (fedora). you can easily tell from the man pages for any unix command and their linux counterpart. that's not to say they are completely different, sometimes the differences are very subtle, even undocumented...

that said, ill copy/paste the man pages for solaris 5.9 (which i have) for the cc command
+ Show Spoiler +

SunOS/BSD Compatibility Package Commands cc(1B)

NAME
cc - C compiler

SYNOPSIS
/usr/ucb/cc [options]

DESCRIPTION
/usr/ucb/cc is the interface to the BSD Compatibility Pack-
age C compiler. It is a script that looks for the link
/usr/ccs/bin/ucbcc to the C compiler. The /usr/ccs/bin/ucbcc
link is available only with the SPROcc package, whose
default location is /opt/SUNWspro. The /usr/ucb/cc interface
is identical to /usr/ccs/bin/ucbcc, except that BSD headers
are used and BSD libraries are linked before base
libraries. The /opt/SUNWspro/man/man1/acc.1 man page is
available only with the SPROcc package.

OPTIONS
The /usr/ucb/cc interface accepts the same options as
/usr/ccs/bin/ucbcc, with the following exceptions:

-Idir Search dir for included files whose names do not begin
with a slash (/) prior to searching the usual direc-
tories. The directories for multiple -I options are
searched in the order specified. The preprocessor
first searches for #include files in the directory
containing sourcefile, and then in directories named
with -I options (if any), then /usr/ucbinclude, and
finally, in /usr/include.

-Ldir Add dir to the list of directories searched for
libraries by /usr/ccs/bin/ucbcc. This option is passed
to /usr/ccs/bin/ld and /usr/lib. Directories specified
with this option are searched before /usr/ucblib and
/usr/lib.

-Y P, dir
Change the default directory used for finding
libraries.

EXIT STATUS
The following exit values are returned:

0 Successful compilation or link edit.

>0 An error occurred.

FILES
/usr/ccs/bin/ld
link editor

/usr/lib/libc

SunOS 5.9 Last change: 24 Feb 1998 1

SunOS/BSD Compatibility Package Commands cc(1B)

C library

/usr/ucbinclude
BSD Compatibility directory for header files

/usr/ucblib
BSD Compatibility directory for libraries

/usr/ucblib/libucb
BSD Compatibility C library

/usr/lib/libsocket
library containing socket routines

/usr/lib/libnsl
library containing network functions

/usr/lib/libelf
library containing routines to process ELF object
files

/usr/lib/libaio
library containing asynchronous I/O routines

ATTRIBUTES
See attributes(5) for descriptions of the following attri-
butes:

____________________________________________________________
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
|_____________________________|_____________________________|
| Availability | SUNWscpu |
|_____________________________|_____________________________|

SEE ALSO
ld(1), a.out(4), attributes(5)

NOTES
The -Y P, dir option may have unexpected results and should
not be used.

SunOS 5.9 Last change: 24 Feb 1998 2

>





and here's the man page for cc from my linux OS (ubuntu):
(incidentally, cc is linked to gcc)

+ Show Spoiler +

GCC(1) GNU GCC(1)



NAME
gcc - GNU project C and C++ compiler

SYNOPSIS
gcc [-c|-S|-E] [-std=standard]
[-g] [-pg] [-Olevel]
[-Wwarn...] [-pedantic]
[-Idir...] [-Ldir...]
[-Dmacro[=defn]...] [-Umacro]
[-foption...] [-mmachine-option...]
[-o outfile] [@file] infile...

Only the most useful options are listed here; see below for the remain‐
der. g++ accepts mostly the same options as gcc.

DESCRIPTION
When you invoke GCC, it normally does preprocessing, compilation,
assembly and linking. The "overall options" allow you to stop this
process at an intermediate stage. For example, the -c option says not
to run the linker. Then the output consists of object files output by
the assembler.

Other options are passed on to one stage of processing. Some options
control the preprocessor and others the compiler itself. Yet other
options control the assembler and linker; most of these are not docu‐
mented here, since you rarely need to use any of them.

Most of the command line options that you can use with GCC are useful
for C programs; when an option is only useful with another language
(usually C++), the explanation says so explicitly. If the description
for a particular option does not mention a source language, you can use
that option with all supported languages.

The gcc program accepts options and file names as operands. Many
options have multi-letter names; therefore multiple single-letter
options may not be grouped: -dr is very different from -d -r.

You can mix options and other arguments. For the most part, the order
you use doesn’t matter. Order does matter when you use several options
of the same kind; for example, if you specify -L more than once, the
directories are searched in the order specified.

Many options have long names starting with -f or with -W---for example,
-fmove-loop-invariants, -Wformat and so on. Most of these have both
positive and negative forms; the negative form of -ffoo would be
-fno-foo. This manual documents only one of these two forms, whichever
one is not the default.

OPTIONS
Option Summary

Here is a summary of all the options, grouped by type. Explanations
are in the following sections.

Overall Options
-c -S -E -o file -combine -pipe -pass-exit-codes -x language
-v -### --help --target-help --version @file

C Language Options
-ansi -std=standard -fgnu89-inline -aux-info filename -fno-asm
-fno-builtin -fno-builtin-function -fhosted -ffreestanding
-fopenmp -fms-extensions -trigraphs -no-integrated-cpp
-traditional -traditional-cpp -fallow-single-precision
-fcond-mismatch -fsigned-bitfields -fsigned-char -funsigned-bit��‐
fields -funsigned-char

C++ Language Options
-fabi-version=n -fno-access-control -fcheck-new -fconserve-space
-ffriend-injection -fno-elide-constructors -fno-enforce-eh-specs
-ffor-scope -fno-for-scope -fno-gnu-keywords -fno-implicit-tem��‐
plates -fno-implicit-inline-templates -fno-implement-inlines
-fms-extensions -fno-nonansi-builtins -fno-operator-names
-fno-optional-diags -fpermissive -frepo -fno-rtti -fstats
-ftemplate-depth-n -fno-threadsafe-statics -fuse-cxa-atexit
-fno-weak -nostdinc++ -fno-default-inline -fvisibil��‐
ity-inlines-hidden -Wabi -Wctor-dtor-privacy -Wnon-virtual-dtor
-Wreorder -Weffc++ -Wno-deprecated -Wstrict-null-sentinel
-Wno-non-template-friend -Wold-style-cast -Woverloaded-virtual
-Wno-pmf-conversions -Wsign-promo

Objective-C and Objective-C++ Language Options
-fconstant-string-class=class-name -fgnu-runtime -fnext-runtime
-fno-nil-receivers -fobjc-call-cxx-cdtors -fobjc-direct-dispatch
-fobjc-exceptions -fobjc-gc -freplace-objc-classes -fzero-link
-gen-decls -Wassign-intercept -Wno-protocol -Wselector
-Wstrict-selector-match -Wundeclared-selector

Language Independent Options
-fmessage-length=n -fdiagnostics-show-location=[once|every-line]
-fdiagnostics-show-option

Warning Options
-fsyntax-only -pedantic -pedantic-errors -w -Wextra -Wall
-Waddress -Waggregate-return -Wno-attributes -Wc++-compat
-Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment -Wconver��‐
sion -Wno-deprecated-declarations -Wdisabled-optimization
-Wno-div-by-zero -Wno-endif-labels -Werror -Werror=* -Wer��‐
ror-implicit-function-declaration -Wfatal-errors -Wfloat-equal
-Wformat -Wformat=2 -Wno-format-extra-args -Wformat-nonliteral
-Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-func��‐
....


there's actually like 20 more pages of detailed info, but you can see that already there are huge differences btwn the two commands.

since all you're doing is just a hello world program to learn the basics, the best way would be to get a different book that is gives you examples specifically for the OS you're using, that way you dont have to tackle these problems and can just get on with learning the programming language.

i'm guessing your book is this:
http://java.sun.com/docs/books/jni/html/start.html

and according to the book,
The -G option instructs the C compiler to generate a shared library instead of a regular Solaris executable file.

when i look for the "shared library" keyword in the manpage for my linux OS, i see that there are some flags that probably do the same thing, look for -shared, -shared-libgcc, -static-libgcc

you can do a man on your own cc, and look for this "shared library" keyword and work out the corresponding flag that you need.
borg
Profile Joined September 2005
171 Posts
Last Edited: 2008-05-15 20:46:37
May 15 2008 20:39 GMT
#12
one other solution that might also help you is that if you're deadset in using solaris, you can run it as a virtual environment under fedora or any other OS.

here's the vmware version of it for solaris 10.

http://www.vmware.com/appliances/directory/420

you should know that this requires installing the vmware (player) software on fedora (shouldnt be that hard) first and then running the vmware image for solaris 10.

vmware and the solaris image are both free.
Please log in or register to reply.
Live Events Refresh
Next event in 1h 46m
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
SortOf 151
ProTech141
FoxeR 57
StarCraft: Brood War
Shuttle 366
actioN 263
Leta 215
PianO 115
Mong 60
Noble 21
soO 17
Sacsri 14
Icarus 9
zelot 7
Dota 2
XaKoH 335
Counter-Strike
m0e_tv553
Super Smash Bros
Mew2King201
Other Games
summit1g8264
WinterStarcraft527
C9.Mang0274
Tasteless196
Organizations
Other Games
gamesdonequick652
StarCraft 2
Blizzard YouTube
StarCraft: Brood War
BSLTrovo
sctven
[ Show 15 non-featured ]
StarCraft 2
• practicex 32
• AfreecaTV YouTube
• intothetv
• Kozan
• IndyKCrew
• LaughNgamezSOOP
• Migwel
• sooper7s
StarCraft: Brood War
• BSLYoutube
• STPLYoutube
• ZZZeroYoutube
League of Legends
• Scarra1558
• Lourlo1220
• Stunt516
• HappyZerGling103
Upcoming Events
Replay Cast
1h 46m
LiuLi Cup
3h 46m
Clem vs Rogue
SHIN vs Cyan
Replay Cast
16h 46m
The PondCast
1d 2h
KCM Race Survival
1d 2h
LiuLi Cup
1d 3h
Scarlett vs TriGGeR
ByuN vs herO
Replay Cast
1d 16h
Online Event
2 days
LiuLi Cup
2 days
Serral vs Zoun
Cure vs Classic
Big Brain Bouts
2 days
Serral vs TBD
[ Show More ]
RSL Revival
2 days
RSL Revival
3 days
LiuLi Cup
3 days
uThermal 2v2 Circuit
3 days
RSL Revival
3 days
Replay Cast
3 days
Sparkling Tuna Cup
4 days
LiuLi Cup
4 days
Replay Cast
4 days
Replay Cast
5 days
LiuLi Cup
5 days
Wardi Open
5 days
Monday Night Weeklies
5 days
Replay Cast
5 days
WardiTV Winter Champion…
6 days
Liquipedia Results

Completed

Proleague 2026-02-09
Rongyi Cup S3
Underdog Cup #3

Ongoing

KCM Race Survival 2026 Season 1
LiuLi Cup: 2025 Grand Finals
Nations Cup 2026
IEM Kraków 2026
BLAST Bounty Winter 2026
BLAST Bounty Winter Qual
eXTREMESLAND 2025
SL Budapest Major 2025
ESL Impact League Season 8

Upcoming

Escore Tournament S1: W8
Acropolis #4
IPSL Spring 2026
HSC XXIX
uThermal 2v2 2026 Main Event
Bellum Gens Elite Stara Zagora 2026
RSL Revival: Season 4
WardiTV Winter 2026
CCT Season 3 Global Finals
FISSURE Playground #3
IEM Rio 2026
PGL Bucharest 2026
Stake Ranked Episode 1
BLAST Open Spring 2026
ESL Pro League Season 23
ESL Pro League Season 23
PGL Cluj-Napoca 2026
TLPD

1. ByuN
2. TY
3. Dark
4. Solar
5. Stats
6. Nerchio
7. sOs
8. soO
9. INnoVation
10. Elazer
1. Rain
2. Flash
3. EffOrt
4. Last
5. Bisu
6. Soulkey
7. Mini
8. Sharp
Sidebar Settings...

Advertising | Privacy Policy | Terms Of Use | Contact Us

Original banner artwork: Jim Warren
The contents of this webpage are copyright © 2026 TLnet. All Rights Reserved.