1*e796c77bSWalter Erquinigo #include <dlfcn.h> 299451b44SJordan Rupprecht #include <stdexcept> 3*e796c77bSWalter Erquinigo #include <stdio.h> 499451b44SJordan Rupprecht 599451b44SJordan Rupprecht int twelve(int i) { 699451b44SJordan Rupprecht return 12 + i; // break 12 799451b44SJordan Rupprecht } 899451b44SJordan Rupprecht 999451b44SJordan Rupprecht int thirteen(int i) { 1099451b44SJordan Rupprecht return 13 + i; // break 13 1199451b44SJordan Rupprecht } 1299451b44SJordan Rupprecht 1399451b44SJordan Rupprecht namespace a { 1499451b44SJordan Rupprecht int fourteen(int i) { 1599451b44SJordan Rupprecht return 14 + i; // break 14 1699451b44SJordan Rupprecht } 1799451b44SJordan Rupprecht } 1899451b44SJordan Rupprecht int main(int argc, char const *argv[]) { 19*e796c77bSWalter Erquinigo #if defined(__APPLE__) 20*e796c77bSWalter Erquinigo const char *libother_name = "libother.dylib"; 21*e796c77bSWalter Erquinigo #else 22*e796c77bSWalter Erquinigo const char *libother_name = "libother.so"; 23*e796c77bSWalter Erquinigo #endif 24*e796c77bSWalter Erquinigo 25*e796c77bSWalter Erquinigo void *handle = dlopen(libother_name, RTLD_NOW); 26*e796c77bSWalter Erquinigo if (handle == nullptr) { 27*e796c77bSWalter Erquinigo fprintf(stderr, "%s\n", dlerror()); 28*e796c77bSWalter Erquinigo exit(1); 29*e796c77bSWalter Erquinigo } 30*e796c77bSWalter Erquinigo 31*e796c77bSWalter Erquinigo int (*foo)(int) = (int (*)(int))dlsym(handle, "foo"); 32*e796c77bSWalter Erquinigo if (foo == nullptr) { 33*e796c77bSWalter Erquinigo fprintf(stderr, "%s\n", dlerror()); 34*e796c77bSWalter Erquinigo exit(2); 35*e796c77bSWalter Erquinigo } 36*e796c77bSWalter Erquinigo foo(12); 37*e796c77bSWalter Erquinigo 3899451b44SJordan Rupprecht for (int i=0; i<10; ++i) { 3999451b44SJordan Rupprecht int x = twelve(i) + thirteen(i) + a::fourteen(i); // break loop 4099451b44SJordan Rupprecht } 4199451b44SJordan Rupprecht try { 4299451b44SJordan Rupprecht throw std::invalid_argument( "throwing exception for testing" ); 4399451b44SJordan Rupprecht } catch (...) { 4499451b44SJordan Rupprecht puts("caught exception..."); 4599451b44SJordan Rupprecht } 4699451b44SJordan Rupprecht return 0; 4799451b44SJordan Rupprecht } 48