My wife interrupted me.... at least that is my excuse. Sorry, make it Peter, not Phillip. Please forgive me. Regards, Les H On Tue, 2007-06-19 at 11:29 -0700, Les wrote: > On Mon, 2007-06-18 at 22:20 -0700, Peter Gordon wrote: > > On Mon, 2007-06-18 at 21:59 -0700, Les wrote: > > > /tmp/cc2fblEI.o: In function `main': > > > GuiExample.cpp:(.text+0x1e): undefined reference to `XOpenDisplay' > > > GuiExample.cpp:(.text+0x102): undefined reference to > > > `XCreateSimpleWindow' > > > GuiExample.cpp:(.text+0x11f): undefined reference to `XSelectInput' > > > GuiExample.cpp:(.text+0x131): undefined reference to `XMapWindow' > > > GuiExample.cpp:(.text+0x153): undefined reference to `XCreateGC' > > > GuiExample.cpp:(.text+0x16f): undefined reference to `XSetForeground' > > > GuiExample.cpp:(.text+0x181): undefined reference to `XNextEvent' > > > GuiExample.cpp:(.text+0x1c4): undefined reference to `XDrawLine' > > > GuiExample.cpp:(.text+0x1cf): undefined reference to `XFlush' > > > collect2: ld returned 1 exit status > > > make: *** [GuiExample] Error 1 > > > > > > > These look like linker errors; make sure you have the libX11-devel > > package installed and that your CXXFLAGS setting (if needed) includes > > the "-lX11" switch so that the linker can properly find the right shared > > library to link to. > > > > > [...] > > > but that would mean that the standard loader execution is messed up, > > > because it should look in /usr/lib for the associated ".a" files that > > > match the headers. > > > > As an aside, Fedora's policy as I understand it is to explicitly exclude > > such static libraries from the packaging unless otherwise absolutely > > necessary. Once you install libX11-devel, you'll see various libX11.so > > symlinks in your /usr/lib directory (or /usr/lib64 if using a 64-bit > > arch). These are how the dynamic linker finds the appropriate library. > > > > Hope that helped. > I appreciate your help Peter. > > I was sort of expecting that when I loaded the Eclipse environment that > it would bring along all the setup to use it. I did have to add the > link to the java JRE for it to run, and I got past that hurdle, then > came to this one. I decided to simplify by trying first gcc and then > make -k, So here I am. > Here is what happened when I tried installing libX11-devel: > # yum install libX11-devel > Loading "fedorakmod" plugin > Loading "installonlyn" plugin > Setting up Install Process > Setting up repositories > Reading repository metadata in from local files > Excluding Packages in global exclude list > Finished > Parsing package install arguments > Nothing to do > > > So just to prove that this didn't change anything I tried: > gcc -L X11 GuiExample.cpp > /tmp/ccOzTvpe.o: In function `main': > GuiExample.cpp:(.text+0x1e): undefined reference to `XOpenDisplay' > GuiExample.cpp:(.text+0x102): undefined reference to > `XCreateSimpleWindow' > GuiExample.cpp:(.text+0x11f): undefined reference to `XSelectInput' > GuiExample.cpp:(.text+0x131): undefined reference to `XMapWindow' > GuiExample.cpp:(.text+0x153): undefined reference to `XCreateGC' > GuiExample.cpp:(.text+0x16f): undefined reference to `XSetForeground' > GuiExample.cpp:(.text+0x181): undefined reference to `XNextEvent' > GuiExample.cpp:(.text+0x1c4): undefined reference to `XDrawLine' > GuiExample.cpp:(.text+0x1cf): undefined reference to `XFlush' > /tmp/ccOzTvpe.o:(.eh_frame+0x11): undefined reference to > `__gxx_personality_v0' > collect2: ld returned 1 exit status > > And then I tried this: > yum whatprovides libX11.so > Loading "fedorakmod" plugin > Loading "installonlyn" plugin > Setting up repositories > Reading repository metadata in from local files > Excluding Packages in global exclude list > Finished > Importing additional filelist information > filelists.xml.gz 100% |=========================| 1.2 MB > 00:08 > dries : ################################################## 3540/3540 > > > > libX11.i386 1.0.3-4.fc6 > core > Matched from: > /usr/lib/libX11.so.6 > /usr/lib/libX11.so.6.2.0 > libX11.so.6 > > > > libX11-devel.i386 1.0.3-4.fc6 > core > Matched from: > /usr/lib/libX11.so > > > > libX11.i386 1.0.3-4.fc6 > core > Matched from: > /usr/lib/libX11.so.6 > /usr/lib/libX11.so.6.2.0 > libX11.so.6 > > > > nx.i386 2.1.0-22.fc6 > extras > Matched from: > /usr/lib/nx/libX11.so.6 > /usr/lib/nx/libX11.so.6.2 > > > > libX11.i386 1.0.3-7.fc6 > updates > Matched from: > /usr/lib/libX11.so.6 > /usr/lib/libX11.so.6.2.0 > libX11.so.6 > > > > libX11.i386 1.0.3-7.fc6 > updates > Matched from: > /usr/lib/libX11.so.6 > /usr/lib/libX11.so.6.2.0 > libX11.so.6 > > > > libX11-devel.i386 1.0.3-7.fc6 > updates > Matched from: > /usr/lib/libX11.so > > > > libX11.i386 1.0.3-7.fc6 > installed > Matched from: > /usr/lib/libX11.so.6 > /usr/lib/libX11.so.6.2.0 > libX11.so.6 > > > > libX11-devel.i386 1.0.3-7.fc6 > installed > Matched from: > /usr/lib/libX11.so > > > next I did > ls -al libX11* > lrwxrwxrwx 1 root root 15 Apr 12 09:35 libX11.so -> libX11.so.6.2.0 > lrwxrwxrwx 1 root root 15 Apr 12 09:34 libX11.so.6 -> > libX11.so.6.2.0 > -rwxr-xr-x 1 root root 1057916 Apr 9 15:12 libX11.so.6.2.0 > > so it looks like libX11.so is installed in /usr/lib. But: > > gcc -LlibX11.so GuiExample.cpp > /tmp/cccbDnur.o: In function `main': > GuiExample.cpp:(.text+0x1e): undefined reference to `XOpenDisplay' > GuiExample.cpp:(.text+0x102): undefined reference to > `XCreateSimpleWindow' > GuiExample.cpp:(.text+0x11f): undefined reference to `XSelectInput' > GuiExample.cpp:(.text+0x131): undefined reference to `XMapWindow' > GuiExample.cpp:(.text+0x153): undefined reference to `XCreateGC' > GuiExample.cpp:(.text+0x16f): undefined reference to `XSetForeground' > GuiExample.cpp:(.text+0x181): undefined reference to `XNextEvent' > GuiExample.cpp:(.text+0x1c4): undefined reference to `XDrawLine' > GuiExample.cpp:(.text+0x1cf): undefined reference to `XFlush' > /tmp/cccbDnur.o:(.eh_frame+0x11): undefined reference to > `__gxx_personality_v0' > collect2: ld returned 1 exit status > > I then tried going to the add/remove software panel and adding more > libraries associated with development, but I was pretty sure I had the > required stuff, and sure enough it didn't change anything. > > I am sorry, and this is probably clear to some of you, but I am at a > loss to understand why this doesn't work. If I use gcc, the presence or > absence of a library .a or .so shouldn't matter since the compiler > should create the link chain based on the extern definition, which could > be resolved at load time. Of course if I wanted to debug the code > statically, I would need the ".a" version of the library, but I don't > want that in this case. I have downloaded and read the gcc manual, and > perused the man pages for both gcc and make. > > Moreover the -L argument to gcc only invokes some printout of the > sym-link-times, which is not useful in this context. Make tries to > interpret the -L instead of passing it to link or ld function, so it > simply doesn't change anything. I know that make should have (does > have) a means to pass arguments to the link and ld processes, I haven't > gotten past the generic compile bit yet using gcc. > > I can try to manually create a local make file, but due to my lapse in > time using make, I will a have to research that a bit first, and I am > not even sure that doing that will cure the problem. > > I understand if there is a problem with linking, but I don't understand > why I have the cpp errors. > > I have also removed the #include for the Xlib.h file and that gave me > more errors, which confirms that the compiler is finding the Xlib.h. I > also checked the Xlib.h file and found that the procedures named in the > error all seem to have templates. So when the compiler gives me an > undefined reference, typically I believe that it is due to a missing > header file, but that is not the case here. I feel so stupid right now. > I have used C for ages, but for the last 15 years I have had my > environment setup on Sun and just used it. When I retired, I wasn't > smart enough to save the details of how I had set it all up. Where is > that notebook entry when you need it??? Oh, the one I forgot to > write!!!! > > I am using the predefined "everything including the kitchen sink" make > file, and I can't even find that file to use as an example. The make > documentation I retrieved doesn't mention the location of the basic make > template file, and I wanted to use that to begin designing a local make > to see if I could code my way out of this in the make file. This is > where the modification to the CXXFLAGS environmental variable should go > anyway for X programs. I will look online for another make example to > see if I can find one to cobble up for this little exercise. But any > further help you might offer will be greatly appreciated. > > Thanks for your help so far, Phillip. > > Regards, > Les H >