First, a simple description of the situation: there are three code files, one main executable and two dynamic libraries. The structure is similar to the weak symbol example:
#include <string>
std::string g_name;
void init_name_lib1()
{
g_name = "lib1";
}
const char* get_name_lib1()
{
return g_name.c_str();
}
#include <string>
std::string g_name;
void init_name_lib2()
{
g_name = "lib2";
}
const char* get_name_lib2()
{
return g_name.c_str();
}
#include <iostream>
void init_name_lib1();
void init_name_lib2();
const char* get_name_lib1();
const char* get_name_lib2();
int main()
{
init_name_lib1();
init_name_lib2();
std::cout << "name from lib1: " << get_name_lib1() << std::endl;
std::cout << "name from lib2: " << get_name_lib2() << std::endl;
return EXIT_SUCCESS;
}


