discuss-gnustep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Linking frameworks does not work


From: Andreas Fink
Subject: Re: Linking frameworks does not work
Date: Wed, 2 May 2018 16:09:39 +0200

I'm not 100% sure how GNUStep frameworks are supposed to be linked but fact is under linux, it looks for shared libraries in all which is referenced in /etc/ld.so.conf (and /etc/ld.so.conf.d/* ). On the mac the path to a shared library is embedded in the library itself so when you link to it, the binary will remember the absolute path (or relative path to the binary). This is not the case under Linux.

I compile my libraries the way that they end up in /usr/local/lib and the headers into /usr/local/include/<frameworkname>/. That way they always work. But its not really the way OS X or GNUStep frameworks are supposed to work as now we dont have bundles anymore but more traditional libraries as in C.

So for the shared libraries to be considered by the linux dynamic library linker at start of a binary, the ldconfig path's have to be set (maybe over an environment variable which is set by the gnustep startup?). And that seems not to happen in your case. So if you pass it at link time, it can link but at runtime it cant find it anymore.

On 2 May 2018, at 16:00, Andreas Höschler <ahoesch@smartsoft.de> wrote:

Hi Andreas,

could it simply be that your /etc/ld.so.conf setup does not include the needed paths to find SRFoundation framework or you didnt run ldconfig after installing/updating the shared library?

Yes, that can be. I have never done that (on MacOSX and GNUStep). And it worked anyway in the past.  I did it now

ldconfig
ls /usr/local/lib/

GNUstep                       libFaxServiceFoundation.so.1.0.0  libgnustep-gui.so.0.26.2     libSRAppKit.so.1.0.0  libSREnterprise.so.1.0.0  libSRInterface.so.1.0.0  libSRObjects.so.1.0.0
libESMFoundation.so           libgnustep-base.so                libLOCommunication.so        libSRDesign.so        libSRFoundation.so        libSRMapKit.so           libSRQuery.so
libESMFoundation.so.1         libgnustep-base.so.1.25           libLOCommunication.so.1      libSRDesign.so.1      libSRFoundation.so.1      libSRMapKit.so.1         libSRQuery.so.1
libESMFoundation.so.1.0.0     libgnustep-base.so.1.25.1         libLOCommunication.so.1.0.0  libSRDesign.so.1.0.0  libSRFoundation.so.1.0.0  libSRMapKit.so.1.0.0     libSRQuery.so.1.0.0
libFaxServiceFoundation.so    libgnustep-gui.so                 libSRAppKit.so               libSREnterprise.so    libSRInterface.so         libSRObjects.so          python2.7
libFaxServiceFoundation.so.1  libgnustep-gui.so.0.26            libSRAppKit.so.1             libSREnterprise.so.1  libSRInterface.so.1       libSRObjects.so.1        python3.5

and see *.so for all my frameworks here.

I redid

make clean
make messages=yes install

for my TabTest application and get

find /usr/local -name TabTest

/usr/local/bin/TabTest
/usr/local/lib/GNUstep/Applications/TabTest.app/TabTest

and when starting the thing with

openapp TabTest

I get

NSInvalidArgumentException:NSString(class) does not recognize stringByChaining:count:

But this method is implemented in SRFoundation:

+ (NSString *)stringByChaining:(NSString *)string count:(int)count
{
...
}

Now it more sounds like it wasnt linked at all

what does 
ldd /usr/local/lib/GNUstep/Applications/TabTest.app/TabTest

say?
Does it include the corresponding libraries?


reply via email to

[Prev in Thread] Current Thread [Next in Thread]