Programming :: How To Change - Add To - Library Search Path At Runtime
Jan 9, 2011
I'm writing an application with a plugin architecture and would like modify (specifically add to) the dynamic library search path while the main executable is running.
The plugin paths are not known until the application is running so I can't set LD_LIBRARY_PATH ahead of time.
My understanding (although I haven't tested it) is that the executable will only parse the LD_LIBRARY_PATH once, early on, so modifying this environment variable at runtime will have no effect.
(Note - on Windows the solution is to modify the PATH environment variable)
I know it's possible to specify the full path to load a dynamic library, and this would work if the plugin(s) only had a single library to load, but some of them will have a bunch of libraries with their own inter-dependencies, so I'd like the plugin folder(s) to get added to the search path to pick up the dependant libs.
I'm writing an application and want to make possible to compile it with or without an optional module. This module requires perl library to be compiled, so I want to check presence of it in 'autoconf'.
The problem exists because perl library is placed in 'non-standart' location itself (like a /usr/lib64/perl5/CORE/libperl.so). So when I try to run configure (with AC_CHECK_LIB or AC_SEARCH_LIBS), it cannot find and link libperl.so in its test.
Trying to pass ./configure CFLAGS=-L/usr/lib64/perl5/CORE/ or ./configure LDFLAGS=-L/usr/lib64/perl5/CORE/
How can I define a location to search for configure's tests?
I would like to set run time library path in my makefile, so that my exe should search run time libraries in that path when executed. How to set this in makefile?
I have an application with a complex binary build procedure which links against 30+ application library archives and an array of system library archives. The problem I'm having is the link ordering. Is there a way to tell the g++ linker to keep searching the libraries for unresolved references, regardless of order, instead of rearranging the order the archives are listed on the command line for a one-time-pass? I'm using g++ 3.2.3 on a Linux AS v3update6 machine.
I have a question about choice of library to be used on low-end systems. I've so far been using SDL to create a user interface for a media system, and it's been working fantastically on my development machine, a dual core 2GHz machine with 2Gb RAM and an Intel graphics card. I get a frame rate of up to 100fps, and there is no slowdown at all. However when I run the exact same program on an embedded motherboard, the VIA EPIA EN15000G, which has a 1.5GHz processor, and a VIA P4M800 graphics chip (possibly the worst graphics chip ever invented as far as Linux support goes), I get a frame rate of less than 5fps. This makes the entire program totally unusable, and I've been left in a bit of a pickle. I've looked into alternatives like SFML, but that looks like it won't help at all on an unaccelerated system. I've also tried using OpenChrome drivers on it, and that made a negligible or nonexistent difference.
Can anybody suggest anything I could look into re: optimising my code or changing libraries goes? I already use SDL_DisplayFormatAlpha to convert my surfaces to the correct format. I haven't looked into Dirty Rectangles yet massively, as there's not much movement at all on the GUI, just the changing of button states.
Would use of OpenGL help at all if using the OpenChrome driver, which apparently has 2D acceleration? I'm more than willing to totally overhaul the code if needs be.
We have a custom app that runs on boot on some older hardware running DSL linux, and their startup manager was quite simple. We purchased some newer Asus eeebox's which run xandros and things are quite stable and run nice with 1 exception.The application only runs from the root (/) location. This box auto logs in as 'user' and there is a /home/user/.kde/Autostart folder where you can stick scripts to run at boot. So I have a start.sh script, and with little bash programming tried things such as; sudo cd / sudo /startapp.pl
but the errors start spewing with the basic;can't find data/xyz as it's looking in the local.I thought there was a basic cwd (change working directory) but everything I try just forces the run from that location.Any ideas or suggestions are appreciated, but things like can you change the code, etc. can't be done, so it must be a programming thing. The only other thought I had but not sure, can you do a cronjob with @boot or something, that when the box starts, it can run this job as root and fire off?
I have a path c:windowsackup I need this string to be changed into /windows/back/up I used the command -bash-3.00$ echo windackup | sed 's/\//g' but the output is windbackup
prefix=user@my-server: find . -depth -type d -name .git -printf '%h�' | while read -d "" path ; do ( cd "$path" || exit $?
[code]....
How shall i go about changing the absolute path to relative path, so that /home/git/mirror/android/adb/ndk.git gets converted to /mirror/android/adb/ndk.git //echo <command> "$prefix$PWD.git" ?? - anything for relative path?
I am facing the following error while running SplitOff.exe in machine 172.24.130.245 : Error : ld.so.1: SplitOff.exe: fatal: libstdc++.so.2.10.0: open failed: No such file or directory.This file is avilabe in ap/local/lib path. how to include the path of exe in the ld library path [only System admin has permission]
i'm using slackware 13.0 with glib2-2.18.4-i486-1 and gtk+2-2.14.7-i486-4 i need to install newer gtk+2, i've installed glib-2.25.7, but in my home directory, so how do i configure the gtk+2, so it points to the glib library path in my home directory. i've tried this command
I would like to run a script from any location. The script is in ~/scripts, so I added ~/scripts to my PATH. However, since I have to run it with 'sh script.sh' (due to the permissions on the directory), it doesn't seem to look in PATH for the file script.sh. Is there a way to get it to do this?
I am trying to setup DNS domain name in my server (Fedora), which has static ip address.First, I put the DNS domain name in system-config-network->DNS->DNS search path. After restarting the network, it is deleted automatically.second, so I put the DNS domain name in /etc/resolv.conf as search mydomainname . After network restart, it is also deleted automatically.In both case domain name did not work (i.e, I can't connect to my server from outside using domain name, I can by ip address, internet is working fine).However, I found that the domain name is written in /etc/sysconfig/network-scripts/ifcfg-eth0 with search=mydominaname.
I have a /data and /backup. on backup there is a folder called Info that has a bunch of data on it, but its not shared through Samba. So what I'm thinking is that on one of my Samba shares on data there is a folder which is really just a link to that /backup/Info folder. Is there an easy way to search through /data to see if there's a link to it, or do i have to manually go through and do a ton of ls's?
I was wondering if there is an argument I can pass to the configuration file to have it use a library from a non-standard path to compile with - for example I would like it to use my perl located in /scratchbox/users/jeff91/usr/bin/perl instead of the standard /usr/bin/perl
I'm reading about shared, static, and dynamic libraries. What is SDL? Is it static, shared, or dynamic?
I always thought a library would be a lot of .h and .cpp files compiled separately into .o files and then if you compiled your own program you could use the -l parameter to link the library and it was all compiled together. Now I'm not so sure.
I don't even see any SDL .cpp files in my system anywhere. All I have are lots of SDL .h files in /usr/include/SDL and I don't really understand the code in them.
I'm making a wild guess here: SDL is a shared library. SDL itself is NOT compiled into my program, therefore SDL must be on any system my program tries to run on. When I compile and link SDL all it needs is the header files to know what SDL function and objects it can use. And then on every system it uses an already compiled SDL shared library thingy somewhere.
So... where is that part of SDL? All I can find are header files.
I'm thinking the advantage of shared libraries is that someone could say update SDL on their own system and take advantage of the new features without having to download new executables with the new version of SDL compiled into them for every program that uses SDL.
So if I'm making an editor and a game engine and they both use a lot of the same .cpp and .h files that I wrote and I'm tired of updating one and then the other and I need to turn them into a library, then a shared library might be kind of a silly solution. I could just make a static library. Right? Because it's not SDL. Nobody else is ever going to use this library.
I am using json library for my application. I have mentioned the path where the library resides in the LD_LIBRARY_PATH. while compiling i have given the following commands.
gcc -o pafitest pafi_test_app.o -ljson
but still i am getting this following error.
/usr/bin/ld: cannot find -ljson collect2: ld returned 1 exit status
Java applet not loading image with relative path(e.g. images/1.jpg) but loads image with absolute path(i.e. from /root/user/images/1.jpg) . This is a problem when i want to host the applet on web server
I just installed Netsurf, but I was confronted with "libnsbmp is not installed". So I installed libnsbmp. The error "libnsgif is not installed" appeared when installing libnsbmp. The error "libpng is not installed" appearded when installing libpnf. ... I installed all that I was asked to install. However, when I was installing libcss, it said that "Package libparserutils was not found in the pkg-config search path. Perhaps you should add the directory containing 'libparserutils.pc' to the PKG_CONFIG_PATH environment variable". I have already installed libparsercutils but not in the /usr/lib dir.
What should I do to continue my installation? And anyone could tell me what are those lib stuff? I installed zlib with the apt-get install command.Can I get other lib stuff with the same command?
I've setup dimdim (opensource, centos 5.3) and noticed yum & rpm commands fail when executed as root because it uses librpmio from openoffice3 instead of /usr/lib (I'm running from memory so I may have misstyped). But sudo doesn't have this problem.
How can root's search path be different, especially after I state /usr & /usr/lib at the top of /etc/ld.so.conf.
I've just built gcc 4.6.0 by myself since there is no update in Mandriva yet and I really needed the updated version, but I must be missing something in its configuration. I added ~/apps/gcc460/bin in front of my PATH, and the lib dir to my LD_LIBRARY_PATH in my .bash_profile, like so:
I still have gcc 4.4.2 installed, but it's now hidden, so gcc --version correctly yields 4.6.0. I finally tried to build my project, all went fine, but at the moment of running it I get: Code: ./EugGame.Release.Linux: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./EugGame.Release.Linux)
I assume the correct version is the one located in ~/apps/gcc460/lib, but how do I make my project load the correct lib? Is it possible at all to have two versions of gcc on the same machine? I just found that I should've added lib64 to my LD_LIBRARY_PATH instead of lib. Anyways, even if the problem is solved, I'd like to hear if my configuration is well made or if I should leave LD_LIBRARY_PATH unset and use some other way to override the default search path for stdlib.
I am new to both linux and fortran programming. I am trying to read from an external file, but it gives this error message: Fortran runtime error: Bad integer for item 1 in list input Part of the code that has the problem is:
All the variables have been declared before and there is no problem with that. The problem (error message) is in the (first) line that deals with open(unit=3,file='..//').
I am trying to install the Matlab 7.5 compiled runtime for 64-bit Linux (MCRInstaller.75.glnxa64.bin) and keep getting a "No Java Runtime Environment(JRE) was found on this system." error message.
I understand the JRE is bundled with MCRInstaller and will self-compile/install. However, I don't have admin access, could this be the source of the problem? If so, how could I fix it (not sure how to direct it to install locally without going into the source code)?
I got around this error before, but stupid me didn't write down what I did and I forgot.