Programming :: Dynamic Memory Across Shared Libraries
Jun 1, 2009
Any good tutorial on sharing dynamically allocated objects across shared libraries in the same process and between shared libaries and main(). In particular, I need to know what creation and destruction sequences are valid when libraries are being loaded and unloaded. For example, is it valid to allocate an object from inside a shared library procedure, and then delete that pointer from a different module, especially in the case where the allocating module has already been unloaded.
I imagine there might be all kinds of problems with this. Although my preliminary tests seem to work most of the time, I get crashes from time to time, but I'm not sure if they're caused by memory management or by threading issues. I've been restructuring my code to use a global context object to manage object creation and destruction from main(), but I'd like to find a clear exposition of the specific issues I'm dealing with before I go too much further.
I want to create a "Shared Memory" in linux, then create multiple "Shared Objects" that can access to a Table for example; And one of them can write something into the Table and the other can access and read it, so that these operations can be handled by programmer! I'm using Ubuntu 9.04 and I've set it's runlevel at 3 (I have commandline environment now!) I've searched the Internet so much, but couldn't find a good sample code for this! I have no experience about it and need your help to introduce me a sample code about it and advise me how to compile and use it with "GCC"?!
I have 2 applications that send and receive messages through shared memory IPC. When I run the app ..it works but the number of messages per sec keeps changing drastically sometimes it is 400-500 per sec..then 800 then 1200 then 2000. is this normal with SHM IPC or could it be a code related issue.
I'm writing a producer-consumer program, where the producer and the consumer are different processes and they communicate using queued signals, and when I run it it comes out always 'segmentation fault'.
Here is my code:
(note: I tried using both 'shm_open()' and 'mmap()', and 'shmget()' and shmat()')
So I'll try to be brief and to the point here: I've got a couple of C / C++ apps that communicate with one another via shared memory. These worked completely fine until.. well, about twenty minutes ago when I finished making some network card changes and suddenly, I've got a weird problem going on. At one point, Parent app waits for Child app to set a boolean indicating it's finished initialization. This worked fine the last time I ran this app up (a few days ago). But right now, the shared flag never seems to get triggered (I've added a printf("Waiting..."); in Parent app until the flag is set). All the code leading up to it being set in Child app seem to be running smoothly, so I tried spitting out the addresses of the shared memory locations. The addresses mapped by Parent app and Child app are different; this seemed odd, so I went back and wrote a simple miniature app that just opened a shared structure on my own box, and I get the same thing - different addresses - but the miniature apps work just fine.
Is it normal for a shared memory space to be mapped to two different addresses across two processes?
If so, does anyone have any idea what might be the issue at hand with my Parent / Child app scenario? The Child creates the shared memory, the Parent has a wait before it opens it, and if it doesn't exist should fail (opening with PROT_READ | PROT_WRITE)... it doesn't fail so it's evidently there.
All of this worked until literally just a few hours ago and I made some changes to my network cards, and I can't even imagine how that could have changed whether or not shared memory mapping worked...
I have an application consisting of different processes and all these processes are linked to shared libraries. I start the application (spawn all the different processes) as say user1. Now with the application up, if I run a process p1, the process gets activated and works. However, if I start the same process p1 as a different user, say user2, which is completely different from user1 the process complains of
"error while loading shared libraries:...."
I set LD_RUN_PATH both in compile and runtime environment. LD_LIBRARY_PATH is set correctly in both places.
All the above works if I set the absolute path of the required shared libraries in /etc/ld.so.conf file and rebuild the /etc/ld.so.cache
Alright, just loaded a fresh copy of OpenSuSE 11.3 x64, went to update manager and let it update, came back and computer was shut down. After booting it back up, I cannot update any software, nor run any commands.
Here is my output:
Code: error while loading shared libraries: libdl.so.2: cannot open shared object file: No such file or directory I've tried searching for this error, some people came back saying to run this:
But all that happens is this:
Nor ls work either so I'm stuck and thinking about a reinstall.
I don't understand how this system could be so messed up after a failed update.. Used to trust SuSE, not sure anymore after this incident..
just installed Ubuntu 10.04 and installed the flightgear package and the fgfs-base package. I ran fgfs from a terminal and got this error:
Code: $ fgfs fgfs: error while loading shared libraries: libOpenThreads.so.12: cannot open shared object file: No such file or directory $ So then I did: Code: sudo apt-get install libopenthreads12 and it gave me these errors:
I'm trying to run Kega Fusion on my laptop, which can now FINALLY run Linux (ATI drivers finally work on it), and I can't get the emulator to work..
Code: brandon@brandon-laptop:~/Desktop/Fusion$ ./Fusion ./Fusion: error while loading shared libraries: libGLU.so.1: cannot open shared object file: No such file or directory brandon@brandon-laptop:~/Desktop/Fusion$ uname -a Linux brandon-laptop 2.6.32-24-generic #38-Ubuntu SMP Mon Jul 5 09:20:59 UTC 2010 x86_64 GNU/Linux brandon@brandon-laptop:~/Desktop/Fusion$ Help? I have the ATI proprietary drivers installed. I tried without them and it still wouldn't work. (And OpenGL is seemingly working as Compiz Fusion is running. I also tried with Compiz disabled but the same error pops up).
I'm running lucid 32-bit. I get this error when I try to run the installer for Unreal Tournament GOTY:
Code: Verifying archive integrity... All good. Uncompressing Unreal Tournament 436-multilanguage.goty Installer. /home/computer/.setup1548: error while loading shared libraries: libgtk-1.2.so.0: cannot open shared object file: No such file or directory computer@computer-desktop:~/UnrealInstall$ I tried installing libgtk1.2 (as told by some people in other threads), but couldn't do that:
Code: E: Couldn't find package libgtk1.2 However, I checked that I do have libgtk2.0 So what should I do?
After finally getting my wireless/graphics drivers working yesterday (thanks to this forum ) I startx to realize that not a single KDE/Qt application will launch, along with Firefox, or Chrome/Chromium. (I did a full install from the DVD, not deselecting anything, and when I upgraded to -current, I also did the same.)
ark: error while loading shared libraries: liblzma.so.0: cannot open shared object file: No such file or directory
but I managed to fix that one by commenting out 'aaa_elflibs' in /etc/slackpkg/blacklist (on a recommendation from #slackware), and running slackpkg upgrade-all again, but that's the only one (afaik) that was fixed. Ark still doesn't work, but it doesn't show that error anymore. When I run it, a box pops up that says "Unable to find Ark's KPart component, please check your installation."
Kate still says:
kate: error while loading shared libraries: libkemoticons.so.4: cannot open shared object file: No such file or directory
Now, konsole, firefox, and Chromium's errors are a little different.
konsole: symbol lookup error: /usr/lib/libphonon.so.4: undefined symbol: _ZN9QMetaType15registerTypedefEPKci
Firefox and Chrome basically say the same thing
/usr/lib/firefox-3.6.13/firefox-bin: symbol lookup error: /usr/lib/mozilla/plugins/skypebuttons.so: undefined symbol: _ZN9QListData11detach_growEPii
again, I am completely baffled here, as I had kate, konsole and ark running before I upgraded to -current.
I am creating two shared libs that i intend to be dynamically linkable in C and C++, cross platform Linux/Windows/Mac. As a basic sketch, true for both libs, the lib code is in several .c/.cpp and .h files. For now, I'll talk about the part that I am actively working on, a lib named Discover, i.e. libdiscover.so.1.0. First, everything is in a namespace, RemKon_Discover.
The main Discover.cpp defines the methods for the Discover class (declared in Discover.h) and has extern "C' routines that can return pointers to my main c++ object. The call to GetLibraryMainPointer() creates a Discover class object, theMainObject (ok, I win a prize for dumb names) and returns the (non-mangled) pointer to the caller over in my test program. The Discover class itself is declared extern "c" and the tester program #includes "Discover.h".
In the test program, dlopen() correctly opens the lib and dlsym() gets the pointer to theMainObject. However, when I use that pointer in the tester program to access a method (aDiscoverObject->hello(), e.g.) I get compile time errors saying that Discover::hello() in an undefined reference. My makefile is attached.
I have what should be a relatively simple program (fadec.c) that maps a struct from an included header file (fadec.h) to a shared memory region, but Im struggling accessing members in the struct from the pointer returned by shmat. Ultimately, I want to access members in the shared memory structure with a globally declared version of the struct, shm__. Not only do I not know how to accomplish that, but I cant even seem to access members of the shared struct directly from the pointer itself (compiler complains about dereferencing pointer to incomplete type). Im at a loss and could use another set of eyes if you guys dont mind taking a gander:
Compile Errors: tony-pc:/cygdrive/p/test> cc -o fadec fadec.c fadec.c: In function 'main': fadec.c:30: error: dereferencing pointer to incomplete type fadec.c:31: error: dereferencing pointer to incomplete type
I have a program that creates and uses a shared memory segment. I am trying to find out how to detach and delete this shared memory segment when I hit crtl-C, and I still need the process to terminate.shmdt() and shmctl() have variables that are local to the main passed to them(shared and shmid)
Code: //Prototype void leave(int sig); //part of code trying to use signal handling if(signal(SIGINT, leave))
I have an old program that kind of depends on older dynamic libraries. They tend to get upgraded easily with distro's updates. I figured that there would be a script with using ldd that would gather the libs needed and create one bigger, statically linked application that wouldn't break so easily. If I could do this, a lot of older KDE libraries could be removed from my system and easen my life.
My distribution of choice is gentoo, but I'm looking for a general solution that doesn't depend on rebuilding anything. If it runs with libs on their path, I'm sure it can be made run with libs somewhere else!
I upgrade the system from 11.1 to 11.2 seems everything work fine, no error no warning, after a reboot the consol show : mount error while loading shared libraries: libvolume_id.so.1: Cannot open shared object file: No such file or directory. when I try to repair the system the repair tool cannot find the root partion,
I installed the latest Gimp beta and it worked fine but then I couldn't open it. I removed it and I reinstalled but it didn't work, so I installed the latest stable version (no beta) and it still does not work, when I open it form Terminal, this is the response:gimp: error while loading shared libraries: libbabl-0.0.so.0: cannot open shared object file: No such file or directory
I am trying to use a shared bzip2 library in a program I'm writing. For the life of me I can't figure out the correct gcc switch to link it in. I've tried pkg-config, but i don't know the name of the .pc file. Is there any rule for these things?
I have a third party static library (libSTATIC.a) that I cannot recompile into a shared library. I want to create a shared library (libSHARED.so) that uses the functions in the static library libSTATIC.a. Is it possible to do this with gcc/g++?
In other words, when linking a C program with gcc/g++ by using the -shared flag, is it necessary that all libraries invoked anywhere in the program (even low level libraries such as libc for example) be available as shared libraries as well?
I installed perl v5.8.5 built for i686-linux on my system recently. From that day if I want to run my vi edition I am getting the error as: Code: vim: error while loading shared libraries: libperl.so: cannot open shared object file: No such file or directory
I am using: Code: [root@station130 CORE]# uname -a Linux station130 2.6.9-5.EL #1 Wed Jan 5 19:22:18 EST 2005 i686 i686 i386 GNU/Linux
i have a notebook where i wont to install andorid SDK, I have a Debian 6, 64bit that work well.After install android sdk, i test installation but i have this
:~/android-sdk-linux_x86/tools$ ./emulator ./emulator: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory i use comand ldd :~/android-sdk-linux_x86/tools$ ldd ./emulator