Und du bist dir sicher, dass du überhaupt selbst ein dlopen()
ausführen willst? Oder willst du nicht einfach dynamische
Bibliotheken linken? Am Ende geht das zwar auch über dlopen(),
aber das macht dann der run-time loader, und der füllt die
entsprechenden dynamischen Symbole auf, sodass du sie in deiner
Quelle direkt benutzen kannst. Wenn du das dlopen() selbst machen
willst, darfst du natürlich noch keine direkten Referenzen auf
die dynamischen Symbole in deinem Programm haben (ich vermute mal,
Dinge wie cvQueryFrame() sind das, worüber sich dein Linker
beschwert), denn es ist ja noch gar nicht sicher, ob das shared
object dann überhaupt gefunden wird. Den Symbolbezug kannst du
dann erst nach dem dlopen() herstellen.
Beispiele gibt's genug dafür, aber s. o., ich denke, dass das gar
nicht das ist, was du willst. Du solltest dein opencv_gui.so in
libopencv_gui.so umbenennen und dann per -lopencv_gui einfach mit
linken lassen.