1e796c77bSWalter Erquinigo #include <dlfcn.h> 299451b44SJordan Rupprecht #include <stdexcept> 3e796c77bSWalter Erquinigo #include <stdio.h> 499451b44SJordan Rupprecht twelve(int i)599451b44SJordan Rupprechtint twelve(int i) { 699451b44SJordan Rupprecht return 12 + i; // break 12 799451b44SJordan Rupprecht } 899451b44SJordan Rupprecht thirteen(int i)999451b44SJordan Rupprechtint thirteen(int i) { 1099451b44SJordan Rupprecht return 13 + i; // break 13 1199451b44SJordan Rupprecht } 1299451b44SJordan Rupprecht 1399451b44SJordan Rupprecht namespace a { fourteen(int i)1499451b44SJordan Rupprecht int fourteen(int i) { 1599451b44SJordan Rupprecht return 14 + i; // break 14 1699451b44SJordan Rupprecht } 1799451b44SJordan Rupprecht } main(int argc,char const * argv[])1899451b44SJordan Rupprechtint main(int argc, char const *argv[]) { 19e796c77bSWalter Erquinigo #if defined(__APPLE__) 20e796c77bSWalter Erquinigo const char *libother_name = "libother.dylib"; 21e796c77bSWalter Erquinigo #else 22e796c77bSWalter Erquinigo const char *libother_name = "libother.so"; 23e796c77bSWalter Erquinigo #endif 24e796c77bSWalter Erquinigo 25e796c77bSWalter Erquinigo void *handle = dlopen(libother_name, RTLD_NOW); 26e796c77bSWalter Erquinigo if (handle == nullptr) { 27e796c77bSWalter Erquinigo fprintf(stderr, "%s\n", dlerror()); 28e796c77bSWalter Erquinigo exit(1); 29e796c77bSWalter Erquinigo } 30e796c77bSWalter Erquinigo 31e796c77bSWalter Erquinigo int (*foo)(int) = (int (*)(int))dlsym(handle, "foo"); 32e796c77bSWalter Erquinigo if (foo == nullptr) { 33e796c77bSWalter Erquinigo fprintf(stderr, "%s\n", dlerror()); 34e796c77bSWalter Erquinigo exit(2); 35e796c77bSWalter Erquinigo } 36*8c6e138aSJeffrey Tan foo(12); // before loop 37e796c77bSWalter 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 } 46*8c6e138aSJeffrey Tan return 0; // after loop 4799451b44SJordan Rupprecht } 48