Skip to content →

Month: December 2008

Undefined symbols: _SCNetworkReachabilityCreateWithName

I was recently adding some code to check for the availability of the network, so I can display an error to the user if unavailable.

I looked at the SeismicXML application and borrowed the following code:


// Use the SystemConfiguration framework to determine if the host that provides
// the RSS feed is available.
– (BOOL)isDataSourceAvailable
{
static BOOL checkNetwork = YES;
if (checkNetwork) {
// Since checking the reachability of a host can be expensive,
// cache the result and perform the reachability check once.
checkNetwork = NO;

Boolean success;
const char *host_name = “earthquake.usgs.gov”;
//const char *host_name = “localhost”;

SCNetworkReachabilityRef reachability =
SCNetworkReachabilityCreateWithName(NULL, host_name);
SCNetworkReachabilityFlags flags;
success = SCNetworkReachabilityGetFlags(reachability, &flags);
_isDataSourceAvailable = success &&
(flags & kSCNetworkFlagsReachable) &&
!(flags & kSCNetworkFlagsConnectionRequired);
CFRelease(reachability);
}
return _isDataSourceAvailable;
}

I wouldn’t compile unless I added the following import:

#import

After adding this I still go 2 more errors, but these were a bit more cryptic.

 Undefined symbols:
"_SCNetworkReachabilityCreateWithName", referenced from:
-[TheElementsAppDelegate isDataSourceAvailable] in TheElementsAppDelegate.o
"_SCNetworkReachabilityGetFlags", referenced from:
-[TheElementsAppDelegate isDataSourceAvailable] in TheElementsAppDelegate.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

After some digging around I realized that I was missing the SystemConfiguration.framework framework.

So here is what I did to add it.
1. I right click on “Frameworks” and choose: Add < Existing Framework
add_framework

2. Browsed to the file: /System/Library/Frameworks/SystemConfiguration.framework

3. Rebuilt the project and my error was gone.

7 Comments

Install SUN JDK on Fedora 10

Installing the SUN JDK on Fedora is pretty simple. Here are some steps you can follow:

1. Go to: http://java.sun.com/javase/downloads/index.jsp

2. Click the download button next to: “Java SE Development Kit (JDK) 6 Update 11” or which ever version you want.

3. On the next page, select Platform: “Linux” and Language: “Multi-language”.  Click on Continue.

4. Then click on the file to download: jdk-6u11-linux-i586.bin  This will download the file to your computer.

5.  Next we need to make the file executable:
     chmod a+x jdk-6u11-linux-i586.bin

6. Then run the installer:
     ./ jdk-6u11-linux-i586.bin

You’ll need to read the Terms & Conditions and accept them.

At this point you can use it as it or set it up more.  Here is what I did.

7.  As root I moved it to /usr/local
     sudo mv  jdk1.6.0_11 /usr/local

8. Then I updated my .bashrc to add it to my path:
     vi ~/.bashrc

Add the following:
export JAVA_HOME=/usr/local/jdk1.6.0_11
export PATH=$PATH:$JAVA_HOME/bin

9.  Now to use java either source the .bashrc like:
     source ~/.bashrc

Or open a new terminal window.

Note 1: Note, these steps should work on most linux distros.

Note 2: If you already have OpenJDK installed, you can remove it with:
     # yum remove java-1.6.0-openjdk java-1.6.0-openjdk-plugin

Note 3: If you are missing some dependancies, you can add them like:
     # yum install compat-libstdc++-33 compat-libstdc++-296

Adding javac to your Path
To make javac available to any individual user, just add the following to each user’s path:

export JAVA_HOME=/usr/local/jdk1.6.0_11
export PATH=$PATH:$JAVA_HOME/bin

For example, if you have a user called doug, you’d open:
/home/doug/.bashrc

And add the 2 export command. (This assume you are using bash and the /home/doug is your home directory)

If you want to make is available to all users, as root edit the file:
/etc/profile

And again add:
export JAVA_HOME=/usr/local/jdk1.6.0_11
export PATH=$PATH:$JAVA_HOME/bin

If your shell is tcsh, you can add it here:
/etc/csh.cshrc

Firefox Plugin
You need to manuallly install the plugin. I followed the instructions in this thread: http://www.e-graviton.com/ird/node/195

On my Linux box, the plugins directory does not exist. So I have to create a new one first. Here are the steps:

1. Make a symbolic link:
$ mkdir plugins
$ pwd
/home/doug/.mozilla/plugins
$ ln -s /usr/local/jdk1.6.0_11/jre/plugin/i386/ns7/libjavaplugin_oji.so ./libjavaplugin_oji.so
$ ls
libjavaplugin_oji.so
$

2. Then I added the following lines to my .bash_profile
MOZ_PLUGIN_PATH=$HOME/.mozilla/plugins
export MOZ_PLUGIN_PATH

3. Log off and log on again, start the firefox, and I can run the java applet on linux!

5 Comments