In buona sostanza puoi usare le direttive di compilazione condizionale.
Qualcosa del genere:

lib1.h:
codice:
#ifndef MY_LIB1_H
#define MY_LIB1_H

#if defined _WIN32 || defined __CYGWIN__
	#ifdef MYDLL_EXPORTS
		#define MYDLL_API __declspec(dllexport)
	#else
		#define MYDLL_API __declspec(dllimport)
	#endif
#else
	#if __GNUC__ >= 4
		#define MYDLL_API __attribute__ ((visibility ("default")))
	#else
		#define MYDLL_API 
	#endif
#endif

#ifdef __cplusplus
extern "C" {
#endif

MYDLL_API int somma(int x, int y);
 
#ifdef __cplusplus
}
#endif

#endif /* MY_LIB1_H */
Quello sopra è l'header file di una libreria(dinamyc linking library, .dll, su windows; shared library, .so, su Linux) che esporta la funzione somma.

lib1.c:
codice:
#include <stdio.h>
#include <stdlib.h>

#define MYDLL_EXPORTS
#include "lib1.h"

MYDLL_API int somma(int x, int y)
{
	return x + y;
}