| 1234567891011121314151617181920212223242526272829303132333435363738394041 | #include <fcntl.h>#include <stdlib.h>#include <stdio.h>#include <dlfcn.h>#include <stdint.h>int main(int argc, char **argv){	int ret = EXIT_SUCCESS;	void *handle;	void (*mydltest)(void *value1, void *value2);	char *error;	uint32_t *value1, *value2;	handle = dlopen (LIBNAME, RTLD_LAZY);	if (!handle) {		fprintf(stderr, "Could not open ./%s: %s\n", LIBNAME, dlerror());		exit(1);	}	mydltest = dlsym(handle, "dltest");	if ((error = dlerror()) != NULL)  {		fprintf(stderr, "Could not locate symbol 'dltest': %s\n", error);		exit(1);	}	mydltest(&value1, &value2);	printf("dltest: pthread_once=%p\n", value1);	printf("dltest: pthread_self=%p\n", value2);	if (value1 == value2) {	    ret = EXIT_FAILURE;	    printf("dltest: values should NOT be equal  Weak values resolved incorrectly!\n");	} else {	    printf("dltest: weak symbols resoved correctly.\n");	}	dlclose(handle);	return ret;}
 |