Gcc problem on FC6

Les hlhowell at pacbell.net
Tue Jun 19 18:35:52 UTC 2007


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
> 




More information about the fedora-list mailing list