Dealing with Shared Libraries on a remote Device
-
Probably not the first time this is asked but... I don't quite get how Qt, or Linux in general maybe, deals with Shared Libraries. I made a couple of Shared Libraries in Qt, plus an application that uses them. This works on the PC, but now I want to make it run on an embedded Linux ARM device.
Not sure if it;s the right way, but I started with deploying the SO files on the device by just running each Qt project. The files are placed at the right spot,
/opt/myModules/Next I try to run the Application. First it refuses with a message like this:
"error while loading shared libraries: libCommonFunc.so.1: cannot open shared object file: No such file or directory"Which might make sense, because the APP *.PRO file refers to a different path (note that the compiled SO files are at a different location on my local PC!!):
LIBS += -L$$PWD/../../CommonFunc/ReleaseARM/ -lCommonFuncSo I changed that with the actual path on the target device (and verified it contains the SO files):
LIBS += -L$$PWD/opt/myModules/ -lCommonFunc or
LIBS += -L/opt/pogModules/ -lCommonFuncNot sure what the difference is. But in both cases it gives me this error:
"error: cannot find -lCommonFunc
"error: collect2: ld returned 1 exit statusNow I remember from another library that I had to update the cache in the device first. That library had to be placed within /opt/lib/, and then I had to execute "sudo ldconfig -C /opt/etc/ld.so.cache". I could do the same for my library, but is it necessary? I expect to change my libraries a billion times the upcoming time. Isn't it just possible to link straight to a library without having it to be registered (I suppose that's what the command above does).
Forgive me if I said stupid things, I'm a complete Linux noob.
-
Hmm,
Just tried to run the "ld.so.cache" command mentioned above, and that did the trick. I think. Now I can just use the first path I had, even though it's not pointing at the right location. When typing "ldd myProgram" on the device, it now says it can find the library. Hurray.However, I feel a bit like a toddler pushing buttons, as I don't really know what the cache update does. As said, I probably update the libraries many, MANY, more times. Should I call the update each time I changed something? And wouldn't it hurt the device? I heard stuff about things getting duplicated in the registry.
So basically the question remains, how do this right?