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 <SystemConfiguration/SystemConfiguration.h> 

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