From f914499f4a96fe69ab9cd8dba48f8e3bfc7a54e5 Mon Sep 17 00:00:00 2001
From: Josh Blum <josh@joshknows.com>
Date: Wed, 20 Jul 2011 18:38:36 -0700
Subject: core: API declaration macros for core class and function symbols

---
 .../src/lib/filter/ccomplex_dotprod_generic.h      |  4 ++-
 .../src/lib/filter/complex_dotprod_generic.h       |  4 ++-
 gnuradio-core/src/lib/filter/dotprod_fff_altivec.h |  1 +
 gnuradio-core/src/lib/filter/dotprod_fff_armv7_a.h |  1 +
 .../src/lib/filter/generate_gr_fir_util.py         |  5 +--
 gnuradio-core/src/lib/filter/gr_adaptive_fir_ccc.h |  3 +-
 gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.h |  3 +-
 gnuradio-core/src/lib/filter/gr_altivec.h          |  5 +--
 gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.h |  7 ++--
 gnuradio-core/src/lib/filter/gr_cpu.h              |  6 ++--
 gnuradio-core/src/lib/filter/gr_dc_blocker_cc.h    |  9 +++---
 gnuradio-core/src/lib/filter/gr_dc_blocker_ff.h    |  9 +++---
 gnuradio-core/src/lib/filter/gr_fft_filter_ccc.h   |  7 ++--
 gnuradio-core/src/lib/filter/gr_fft_filter_fff.h   |  7 ++--
 gnuradio-core/src/lib/filter/gr_filter_delay_fc.h  |  7 ++--
 gnuradio-core/src/lib/filter/gr_fir_XXX.h.t        |  3 +-
 .../src/lib/filter/gr_fir_XXX_generic.h.t          |  3 +-
 gnuradio-core/src/lib/filter/gr_fir_ccc_simd.h     |  3 +-
 gnuradio-core/src/lib/filter/gr_fir_ccc_x86.h      |  7 ++--
 gnuradio-core/src/lib/filter/gr_fir_ccf_simd.h     |  3 +-
 gnuradio-core/src/lib/filter/gr_fir_ccf_x86.h      |  5 +--
 gnuradio-core/src/lib/filter/gr_fir_fcc_simd.h     |  3 +-
 gnuradio-core/src/lib/filter/gr_fir_fcc_x86.h      |  5 +--
 gnuradio-core/src/lib/filter/gr_fir_fff_altivec.h  |  3 +-
 gnuradio-core/src/lib/filter/gr_fir_fff_armv7_a.h  |  3 +-
 gnuradio-core/src/lib/filter/gr_fir_fff_simd.h     |  3 +-
 gnuradio-core/src/lib/filter/gr_fir_fff_x86.h      |  5 +--
 gnuradio-core/src/lib/filter/gr_fir_filter_XXX.h.t |  7 ++--
 gnuradio-core/src/lib/filter/gr_fir_fsf_simd.h     |  3 +-
 gnuradio-core/src/lib/filter/gr_fir_fsf_x86.h      |  5 +--
 gnuradio-core/src/lib/filter/gr_fir_scc_simd.h     |  3 +-
 gnuradio-core/src/lib/filter/gr_fir_scc_x86.h      |  7 ++--
 .../src/lib/filter/gr_fir_sysconfig_armv7_a.h      |  3 +-
 .../src/lib/filter/gr_fir_sysconfig_powerpc.h      |  3 +-
 .../src/lib/filter/gr_fir_sysconfig_x86.h          |  3 +-
 .../src/lib/filter/gr_fractional_interpolator_cc.h |  7 ++--
 .../src/lib/filter/gr_fractional_interpolator_ff.h |  7 ++--
 .../lib/filter/gr_freq_xlating_fir_filter_XXX.h.t  |  7 ++--
 gnuradio-core/src/lib/filter/gr_goertzel_fc.h      |  7 ++--
 gnuradio-core/src/lib/filter/gr_hilbert_fc.h       |  7 ++--
 gnuradio-core/src/lib/filter/gr_iir_filter_ffd.h   |  7 ++--
 .../src/lib/filter/gr_interp_fir_filter_XXX.h.t    |  7 ++--
 .../src/lib/filter/gr_pfb_arb_resampler_ccf.h      |  7 ++--
 .../src/lib/filter/gr_pfb_channelizer_ccf.h        |  7 ++--
 .../src/lib/filter/gr_pfb_clock_sync_ccf.h         |  7 ++--
 .../src/lib/filter/gr_pfb_clock_sync_fff.h         |  7 ++--
 .../src/lib/filter/gr_pfb_decimator_ccf.h          |  7 ++--
 .../src/lib/filter/gr_pfb_interpolator_ccf.h       |  7 ++--
 .../lib/filter/gr_pfb_synthesis_filterbank_ccf.h   |  7 ++--
 .../lib/filter/gr_rational_resampler_base_XXX.h.t  |  7 ++--
 gnuradio-core/src/lib/filter/gr_rotator.h          |  3 +-
 gnuradio-core/src/lib/filter/gr_sincos.h           |  6 ++--
 gnuradio-core/src/lib/filter/gr_single_pole_iir.h  |  1 +
 .../src/lib/filter/gr_single_pole_iir_filter_cc.h  |  7 ++--
 .../src/lib/filter/gr_single_pole_iir_filter_ff.h  |  7 ++--
 .../src/lib/filter/gri_fft_filter_ccc_generic.h    |  3 +-
 .../src/lib/filter/gri_fft_filter_ccc_sse.h        |  3 +-
 .../src/lib/filter/gri_fft_filter_fff_generic.h    |  3 +-
 .../src/lib/filter/gri_fft_filter_fff_sse.h        |  3 +-
 .../lib/filter/gri_fir_filter_with_buffer_XXX.h.t  |  3 +-
 gnuradio-core/src/lib/filter/gri_goertzel.h        |  3 +-
 gnuradio-core/src/lib/filter/gri_iir.h             |  1 +
 .../src/lib/filter/gri_mmse_fir_interpolator.h     |  3 +-
 .../src/lib/filter/gri_mmse_fir_interpolator_cc.h  |  3 +-
 gnuradio-core/src/lib/filter/qa_filter.h           |  3 +-
 gnuradio-core/src/lib/general/complex_vec_test.h   | 17 +++++-----
 .../src/lib/general/gr_additive_scrambler_bb.h     |  7 ++--
 gnuradio-core/src/lib/general/gr_agc2_cc.h         |  7 ++--
 gnuradio-core/src/lib/general/gr_agc2_ff.h         |  7 ++--
 gnuradio-core/src/lib/general/gr_agc_cc.h          |  7 ++--
 gnuradio-core/src/lib/general/gr_agc_ff.h          |  7 ++--
 .../src/lib/general/gr_align_on_samplenumbers_ss.h |  9 +++---
 gnuradio-core/src/lib/general/gr_annotator_1to1.h  |  7 ++--
 .../src/lib/general/gr_annotator_alltoall.h        |  7 ++--
 .../src/lib/general/gr_bin_statistics_f.h          |  7 ++--
 .../src/lib/general/gr_binary_slicer_fb.h          |  7 ++--
 gnuradio-core/src/lib/general/gr_burst_tagger.h    |  7 ++--
 gnuradio-core/src/lib/general/gr_bytes_to_syms.h   |  7 ++--
 gnuradio-core/src/lib/general/gr_char_to_float.h   |  7 ++--
 .../src/lib/general/gr_check_counting_s.h          |  7 ++--
 .../src/lib/general/gr_check_lfsr_32k_s.h          |  7 ++--
 gnuradio-core/src/lib/general/gr_circular_file.h   |  6 ++--
 .../src/lib/general/gr_clock_recovery_mm_cc.h      |  7 ++--
 .../src/lib/general/gr_clock_recovery_mm_ff.h      |  7 ++--
 .../lib/general/gr_complex_to_interleaved_short.h  |  7 ++--
 gnuradio-core/src/lib/general/gr_complex_to_xxx.h  | 37 +++++++++++-----------
 gnuradio-core/src/lib/general/gr_conjugate_cc.h    |  7 ++--
 gnuradio-core/src/lib/general/gr_constants.h       | 11 ++++---
 .../src/lib/general/gr_constellation_decoder_cb.h  |  7 ++--
 gnuradio-core/src/lib/general/gr_copy.h            |  7 ++--
 gnuradio-core/src/lib/general/gr_core_api.h        | 33 +++++++++++++++++++
 .../src/lib/general/gr_correlate_access_code_bb.h  |  7 ++--
 gnuradio-core/src/lib/general/gr_costas_loop_cc.h  |  7 ++--
 gnuradio-core/src/lib/general/gr_count_bits.h      | 10 +++---
 gnuradio-core/src/lib/general/gr_cpfsk_bc.h        |  7 ++--
 gnuradio-core/src/lib/general/gr_crc32.h           |  9 +++---
 .../src/lib/general/gr_ctcss_squelch_ff.h          |  7 ++--
 .../src/lib/general/gr_decode_ccsds_27_fb.h        |  9 +++---
 gnuradio-core/src/lib/general/gr_deinterleave.h    |  7 ++--
 gnuradio-core/src/lib/general/gr_delay.h           |  7 ++--
 gnuradio-core/src/lib/general/gr_descrambler_bb.h  |  7 ++--
 gnuradio-core/src/lib/general/gr_diff_decoder_bb.h |  7 ++--
 gnuradio-core/src/lib/general/gr_diff_encoder_bb.h |  7 ++--
 gnuradio-core/src/lib/general/gr_diff_phasor_cc.h  |  7 ++--
 gnuradio-core/src/lib/general/gr_dpll_bb.h         |  7 ++--
 .../src/lib/general/gr_encode_ccsds_27_bb.h        |  7 ++--
 gnuradio-core/src/lib/general/gr_expj.h            |  1 +
 .../src/lib/general/gr_fake_channel_coder_pp.h     | 13 ++++----
 .../src/lib/general/gr_feedforward_agc_cc.h        |  7 ++--
 gnuradio-core/src/lib/general/gr_feval.h           | 17 +++++-----
 gnuradio-core/src/lib/general/gr_fft_vcc.h         |  7 ++--
 gnuradio-core/src/lib/general/gr_fft_vcc_fftw.h    |  7 ++--
 gnuradio-core/src/lib/general/gr_fft_vfc.h         |  7 ++--
 gnuradio-core/src/lib/general/gr_firdes.h          |  3 +-
 .../src/lib/general/gr_fll_band_edge_cc.h          |  7 ++--
 gnuradio-core/src/lib/general/gr_float_to_char.h   |  7 ++--
 .../src/lib/general/gr_float_to_complex.h          |  7 ++--
 gnuradio-core/src/lib/general/gr_float_to_short.h  |  7 ++--
 gnuradio-core/src/lib/general/gr_float_to_uchar.h  |  7 ++--
 gnuradio-core/src/lib/general/gr_fmdet_cf.h        |  7 ++--
 gnuradio-core/src/lib/general/gr_framer_sink_1.h   |  7 ++--
 .../src/lib/general/gr_frequency_modulator_fc.h    |  7 ++--
 gnuradio-core/src/lib/general/gr_fxpt.h            |  5 +--
 gnuradio-core/src/lib/general/gr_fxpt_nco.h        |  3 +-
 gnuradio-core/src/lib/general/gr_fxpt_vco.h        |  3 +-
 gnuradio-core/src/lib/general/gr_glfsr_source_b.h  |  7 ++--
 gnuradio-core/src/lib/general/gr_glfsr_source_f.h  |  7 ++--
 gnuradio-core/src/lib/general/gr_head.h            |  7 ++--
 gnuradio-core/src/lib/general/gr_int_to_float.h    |  7 ++--
 gnuradio-core/src/lib/general/gr_interleave.h      |  7 ++--
 .../lib/general/gr_interleaved_short_to_complex.h  |  7 ++--
 gnuradio-core/src/lib/general/gr_iqcomp_cc.h       |  7 ++--
 gnuradio-core/src/lib/general/gr_keep_one_in_n.h   |  7 ++--
 gnuradio-core/src/lib/general/gr_kludge_copy.h     |  7 ++--
 .../src/lib/general/gr_lfsr_32k_source_s.h         |  7 ++--
 gnuradio-core/src/lib/general/gr_lms_dfe_cc.h      |  7 ++--
 gnuradio-core/src/lib/general/gr_lms_dfe_ff.h      |  7 ++--
 gnuradio-core/src/lib/general/gr_log2_const.h      |  1 +
 gnuradio-core/src/lib/general/gr_map_bb.h          |  7 ++--
 gnuradio-core/src/lib/general/gr_math.h            |  3 +-
 gnuradio-core/src/lib/general/gr_misc.h            |  9 +++---
 .../src/lib/general/gr_mpsk_receiver_cc.h          |  7 ++--
 gnuradio-core/src/lib/general/gr_nlog10_ff.h       |  7 ++--
 gnuradio-core/src/lib/general/gr_nop.h             |  7 ++--
 gnuradio-core/src/lib/general/gr_null_sink.h       |  8 ++---
 gnuradio-core/src/lib/general/gr_null_source.h     |  7 ++--
 .../src/lib/general/gr_ofdm_bpsk_demapper.h        |  7 ++--
 .../src/lib/general/gr_ofdm_cyclic_prefixer.h      |  7 ++--
 .../src/lib/general/gr_ofdm_demapper_vcb.h         |  7 ++--
 .../src/lib/general/gr_ofdm_frame_acquisition.h    |  7 ++--
 gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h |  7 ++--
 .../src/lib/general/gr_ofdm_frame_sink2.h          |  7 ++--
 .../src/lib/general/gr_ofdm_insert_preamble.h      |  7 ++--
 gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.h |  7 ++--
 gnuradio-core/src/lib/general/gr_ofdm_sampler.h    |  7 ++--
 .../src/lib/general/gr_pa_2x2_phase_combiner.h     |  7 ++--
 gnuradio-core/src/lib/general/gr_packet_sink.h     |  7 ++--
 .../src/lib/general/gr_peak_detector2_fb.h         |  7 ++--
 .../src/lib/general/gr_phase_modulator_fc.h        |  7 ++--
 .../src/lib/general/gr_pll_carriertracking_cc.h    |  7 ++--
 gnuradio-core/src/lib/general/gr_pll_freqdet_cf.h  |  7 ++--
 gnuradio-core/src/lib/general/gr_pll_refout_cc.h   |  7 ++--
 .../src/lib/general/gr_pn_correlator_cc.h          |  7 ++--
 gnuradio-core/src/lib/general/gr_prefs.h           |  3 +-
 .../src/lib/general/gr_probe_avg_mag_sqrd_c.h      |  7 ++--
 .../src/lib/general/gr_probe_avg_mag_sqrd_cf.h     |  7 ++--
 .../src/lib/general/gr_probe_avg_mag_sqrd_f.h      |  7 ++--
 gnuradio-core/src/lib/general/gr_probe_density_b.h |  7 ++--
 .../src/lib/general/gr_probe_mpsk_snr_c.h          |  7 ++--
 gnuradio-core/src/lib/general/gr_probe_signal_f.h  |  7 ++--
 gnuradio-core/src/lib/general/gr_pwr_squelch_cc.h  |  7 ++--
 gnuradio-core/src/lib/general/gr_pwr_squelch_ff.h  |  7 ++--
 .../src/lib/general/gr_quadrature_demod_cf.h       |  7 ++--
 gnuradio-core/src/lib/general/gr_rail_ff.h         |  7 ++--
 gnuradio-core/src/lib/general/gr_random.h          |  3 +-
 gnuradio-core/src/lib/general/gr_regenerate_bb.h   |  7 ++--
 gnuradio-core/src/lib/general/gr_remez.h           |  3 +-
 gnuradio-core/src/lib/general/gr_repeat.h          |  7 ++--
 gnuradio-core/src/lib/general/gr_reverse.h         |  1 +
 gnuradio-core/src/lib/general/gr_rms_cf.h          |  7 ++--
 gnuradio-core/src/lib/general/gr_rms_ff.h          |  7 ++--
 gnuradio-core/src/lib/general/gr_scrambler_bb.h    |  7 ++--
 gnuradio-core/src/lib/general/gr_short_to_float.h  |  7 ++--
 .../src/lib/general/gr_simple_correlator.h         |  7 ++--
 gnuradio-core/src/lib/general/gr_simple_framer.h   |  7 ++--
 .../src/lib/general/gr_simple_squelch_cc.h         |  7 ++--
 gnuradio-core/src/lib/general/gr_skiphead.h        | 12 +++----
 gnuradio-core/src/lib/general/gr_squash_ff.h       |  7 ++--
 gnuradio-core/src/lib/general/gr_squelch_base_cc.h |  3 +-
 gnuradio-core/src/lib/general/gr_squelch_base_ff.h |  3 +-
 gnuradio-core/src/lib/general/gr_stream_mux.h      |  7 ++--
 .../src/lib/general/gr_stream_to_streams.h         |  7 ++--
 .../src/lib/general/gr_stream_to_vector.h          |  7 ++--
 .../src/lib/general/gr_streams_to_stream.h         |  7 ++--
 .../src/lib/general/gr_streams_to_vector.h         |  7 ++--
 gnuradio-core/src/lib/general/gr_stretch_ff.h      |  7 ++--
 gnuradio-core/src/lib/general/gr_test.h            |  7 ++--
 gnuradio-core/src/lib/general/gr_threshold_ff.h    |  7 ++--
 gnuradio-core/src/lib/general/gr_throttle.h        |  5 +--
 gnuradio-core/src/lib/general/gr_uchar_to_float.h  |  7 ++--
 .../src/lib/general/gr_unpack_k_bits_bb.h          |  7 ++--
 gnuradio-core/src/lib/general/gr_vco_f.h           |  7 ++--
 .../src/lib/general/gr_vector_to_stream.h          |  7 ++--
 .../src/lib/general/gr_vector_to_streams.h         |  7 ++--
 gnuradio-core/src/lib/general/gr_wavelet_ff.h      |  7 ++--
 gnuradio-core/src/lib/general/gr_wvps_ff.h         |  7 ++--
 gnuradio-core/src/lib/general/gri_agc2_cc.h        |  3 +-
 gnuradio-core/src/lib/general/gri_agc2_ff.h        |  3 +-
 gnuradio-core/src/lib/general/gri_agc_cc.h         |  3 +-
 gnuradio-core/src/lib/general/gri_agc_ff.h         |  3 +-
 gnuradio-core/src/lib/general/gri_char_to_float.h  |  6 ++--
 gnuradio-core/src/lib/general/gri_debugger_hook.h  |  6 ++--
 gnuradio-core/src/lib/general/gri_fft.h            |  9 +++---
 gnuradio-core/src/lib/general/gri_float_to_char.h  |  5 +--
 gnuradio-core/src/lib/general/gri_float_to_short.h |  5 +--
 gnuradio-core/src/lib/general/gri_float_to_uchar.h |  5 +--
 gnuradio-core/src/lib/general/gri_glfsr.h          |  6 ++--
 .../lib/general/gri_interleaved_short_to_complex.h |  3 +-
 gnuradio-core/src/lib/general/gri_lfsr.h           |  3 +-
 gnuradio-core/src/lib/general/gri_lfsr_15_1_0.h    |  6 ++--
 gnuradio-core/src/lib/general/gri_lfsr_32k.h       |  3 +-
 gnuradio-core/src/lib/general/gri_short_to_float.h |  6 ++--
 gnuradio-core/src/lib/general/gri_uchar_to_float.h |  6 ++--
 gnuradio-core/src/lib/general/malloc16.h           |  8 +++--
 gnuradio-core/src/lib/general/qa_general.h         |  3 +-
 gnuradio-core/src/lib/gengen/gr_add_XX.h.t         |  7 ++--
 gnuradio-core/src/lib/gengen/gr_add_const_XX.h.t   |  7 ++--
 gnuradio-core/src/lib/gengen/gr_add_const_vXX.h.t  |  7 ++--
 gnuradio-core/src/lib/gengen/gr_and_XX.h.t         |  7 ++--
 gnuradio-core/src/lib/gengen/gr_and_const_XX.h.t   |  7 ++--
 gnuradio-core/src/lib/gengen/gr_argmax_XX.h.t      |  7 ++--
 .../src/lib/gengen/gr_chunks_to_symbols_XX.h.t     |  7 ++--
 gnuradio-core/src/lib/gengen/gr_divide_XX.h.t      |  7 ++--
 gnuradio-core/src/lib/gengen/gr_integrate_XX.h.t   |  7 ++--
 gnuradio-core/src/lib/gengen/gr_max_XX.h.t         |  7 ++--
 .../src/lib/gengen/gr_moving_average_XX.h.t        |  7 ++--
 gnuradio-core/src/lib/gengen/gr_multiply_XX.h.t    |  7 ++--
 .../src/lib/gengen/gr_multiply_const_XX.h.t        |  7 ++--
 .../src/lib/gengen/gr_multiply_const_vXX.h.t       |  7 ++--
 gnuradio-core/src/lib/gengen/gr_mute_XX.h.t        |  7 ++--
 gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t |  7 ++--
 gnuradio-core/src/lib/gengen/gr_not_XX.h.t         |  7 ++--
 gnuradio-core/src/lib/gengen/gr_or_XX.h.t          |  7 ++--
 .../src/lib/gengen/gr_packed_to_unpacked_XX.h.t    |  7 ++--
 .../src/lib/gengen/gr_peak_detector_XX.h.t         |  7 ++--
 .../src/lib/gengen/gr_sample_and_hold_XX.h.t       |  7 ++--
 gnuradio-core/src/lib/gengen/gr_sig_source_X.h.t   |  7 ++--
 gnuradio-core/src/lib/gengen/gr_sub_XX.h.t         |  7 ++--
 .../src/lib/gengen/gr_unpacked_to_packed_XX.h.t    |  7 ++--
 gnuradio-core/src/lib/gengen/gr_vector_sink_X.h.t  |  7 ++--
 .../src/lib/gengen/gr_vector_source_X.h.t          |  7 ++--
 gnuradio-core/src/lib/gengen/gr_xor_XX.h.t         |  7 ++--
 gnuradio-core/src/lib/hier/gr_channel_model.h      |  7 ++--
 gnuradio-core/src/lib/io/gr_file_descriptor_sink.h |  7 ++--
 .../src/lib/io/gr_file_descriptor_source.h         |  7 ++--
 gnuradio-core/src/lib/io/gr_file_sink.h            |  7 ++--
 gnuradio-core/src/lib/io/gr_file_sink_base.h       |  3 +-
 gnuradio-core/src/lib/io/gr_file_source.h          |  7 ++--
 gnuradio-core/src/lib/io/gr_histo_sink_f.h         |  7 ++--
 gnuradio-core/src/lib/io/gr_message_sink.h         |  7 ++--
 gnuradio-core/src/lib/io/gr_message_source.h       | 11 ++++---
 gnuradio-core/src/lib/io/gr_oscope_guts.h          |  3 +-
 gnuradio-core/src/lib/io/gr_oscope_sink_f.h        |  7 ++--
 gnuradio-core/src/lib/io/gr_oscope_sink_x.h        |  3 +-
 gnuradio-core/src/lib/io/gr_tagged_file_sink.h     |  7 ++--
 gnuradio-core/src/lib/io/gr_udp_sink.h             |  7 ++--
 gnuradio-core/src/lib/io/gr_udp_source.h           |  7 ++--
 gnuradio-core/src/lib/io/gr_wavfile_sink.h         |  7 ++--
 gnuradio-core/src/lib/io/gr_wavfile_source.h       |  7 ++--
 gnuradio-core/src/lib/io/gri_wavfile.h             |  1 +
 gnuradio-core/src/lib/io/i2c.h                     |  3 +-
 gnuradio-core/src/lib/io/i2c_bbio.h                |  3 +-
 gnuradio-core/src/lib/io/i2c_bbio_pp.h             |  7 ++--
 gnuradio-core/src/lib/io/i2c_bitbang.h             |  7 ++--
 gnuradio-core/src/lib/io/microtune_4702.h          |  3 +-
 .../src/lib/io/microtune_4702_eval_board.h         |  3 +-
 gnuradio-core/src/lib/io/microtune_4937.h          |  3 +-
 .../src/lib/io/microtune_4937_eval_board.h         |  3 +-
 gnuradio-core/src/lib/io/microtune_xxxx.h          |  3 +-
 .../src/lib/io/microtune_xxxx_eval_board.h         |  3 +-
 gnuradio-core/src/lib/io/ppio.h                    |  5 +--
 gnuradio-core/src/lib/io/ppio_ppdev.h              |  5 +--
 gnuradio-core/src/lib/io/sdr_1000.h                |  3 +-
 gnuradio-core/src/lib/reed-solomon/char.h          |  9 +++---
 gnuradio-core/src/lib/reed-solomon/fixed.h         |  6 ++--
 gnuradio-core/src/lib/reed-solomon/int.h           | 11 ++++---
 gnuradio-core/src/lib/reed-solomon/rs.h            | 15 +++++----
 gnuradio-core/src/lib/runtime/gr_basic_block.h     |  5 +--
 gnuradio-core/src/lib/runtime/gr_block.h           |  5 +--
 gnuradio-core/src/lib/runtime/gr_block_detail.h    | 11 ++++---
 gnuradio-core/src/lib/runtime/gr_block_executor.h  |  3 +-
 gnuradio-core/src/lib/runtime/gr_buffer.h          | 19 +++++------
 gnuradio-core/src/lib/runtime/gr_dispatcher.h      |  9 +++---
 gnuradio-core/src/lib/runtime/gr_error_handler.h   |  7 ++--
 gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h  |  7 ++--
 gnuradio-core/src/lib/runtime/gr_flowgraph.h       | 11 ++++---
 gnuradio-core/src/lib/runtime/gr_hier_block2.h     |  7 ++--
 .../src/lib/runtime/gr_hier_block2_detail.h        |  3 +-
 gnuradio-core/src/lib/runtime/gr_io_signature.h    | 13 ++++----
 .../src/lib/runtime/gr_local_sighandler.h          |  5 +--
 gnuradio-core/src/lib/runtime/gr_message.h         | 13 ++++----
 gnuradio-core/src/lib/runtime/gr_msg_accepter.h    |  3 +-
 gnuradio-core/src/lib/runtime/gr_msg_handler.h     |  3 +-
 gnuradio-core/src/lib/runtime/gr_msg_queue.h       |  5 +--
 gnuradio-core/src/lib/runtime/gr_pagesize.h        |  6 ++--
 gnuradio-core/src/lib/runtime/gr_preferences.h     |  6 ++--
 gnuradio-core/src/lib/runtime/gr_realtime.h        |  3 +-
 gnuradio-core/src/lib/runtime/gr_runtime_types.h   |  1 +
 gnuradio-core/src/lib/runtime/gr_scheduler.h       |  3 +-
 gnuradio-core/src/lib/runtime/gr_scheduler_sts.h   |  3 +-
 gnuradio-core/src/lib/runtime/gr_scheduler_tpb.h   |  3 +-
 gnuradio-core/src/lib/runtime/gr_select_handler.h  |  3 +-
 .../src/lib/runtime/gr_single_threaded_scheduler.h |  7 ++--
 gnuradio-core/src/lib/runtime/gr_sptr_magic.h      |  3 +-
 gnuradio-core/src/lib/runtime/gr_sync_block.h      |  3 +-
 gnuradio-core/src/lib/runtime/gr_sync_decimator.h  |  3 +-
 .../src/lib/runtime/gr_sync_interpolator.h         |  3 +-
 gnuradio-core/src/lib/runtime/gr_sys_paths.h       |  6 ++--
 gnuradio-core/src/lib/runtime/gr_timer.h           |  9 +++---
 gnuradio-core/src/lib/runtime/gr_top_block.h       |  7 ++--
 gnuradio-core/src/lib/runtime/gr_top_block_impl.h  |  3 +-
 gnuradio-core/src/lib/runtime/gr_tpb_detail.h      |  3 +-
 gnuradio-core/src/lib/runtime/gr_tpb_thread_body.h |  3 +-
 gnuradio-core/src/lib/runtime/gr_types.h           |  1 +
 gnuradio-core/src/lib/runtime/gr_unittests.h       |  2 ++
 gnuradio-core/src/lib/runtime/gr_vmcircbuf.h       |  7 ++--
 .../lib/runtime/gr_vmcircbuf_createfilemapping.h   |  5 +--
 .../src/lib/runtime/gr_vmcircbuf_mmap_shm_open.h   |  5 +--
 .../src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.h    |  5 +--
 .../src/lib/runtime/gr_vmcircbuf_sysv_shm.h        |  5 +--
 gnuradio-core/src/lib/runtime/qa_runtime.h         |  3 +-
 gnuradio-core/src/lib/swig/gnuradio_core_general.i |  2 ++
 gnuradio-core/src/lib/viterbi/Makefile.am          |  2 ++
 gnuradio-core/src/lib/viterbi/viterbi.h            | 14 +++++---
 334 files changed, 1238 insertions(+), 851 deletions(-)
 create mode 100644 gnuradio-core/src/lib/general/gr_core_api.h
 mode change 100755 => 100644 gnuradio-core/src/lib/gengen/gr_add_const_vXX.h.t
 mode change 100755 => 100644 gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.h.t

(limited to 'gnuradio-core/src')

diff --git a/gnuradio-core/src/lib/filter/ccomplex_dotprod_generic.h b/gnuradio-core/src/lib/filter/ccomplex_dotprod_generic.h
index 4637dc7062..c037437762 100644
--- a/gnuradio-core/src/lib/filter/ccomplex_dotprod_generic.h
+++ b/gnuradio-core/src/lib/filter/ccomplex_dotprod_generic.h
@@ -23,7 +23,9 @@
 #ifndef _CCOMPLEX_DOTPROD_GENERIC_H_
 #define _CCOMPLEX_DOTPROD_GENERIC_H_
 
-void
+#include <gr_core_api.h>
+
+GR_CORE_API void
 ccomplex_dotprod_generic (const float *input,
 		       const float *taps, unsigned n_2_ccomplex_blocks,
 		       float *result);
diff --git a/gnuradio-core/src/lib/filter/complex_dotprod_generic.h b/gnuradio-core/src/lib/filter/complex_dotprod_generic.h
index 75d18e7f11..aed82179ea 100644
--- a/gnuradio-core/src/lib/filter/complex_dotprod_generic.h
+++ b/gnuradio-core/src/lib/filter/complex_dotprod_generic.h
@@ -23,7 +23,9 @@
 #ifndef _COMPLEX_DOTPROD_GENERIC_H_
 #define _COMPLEX_DOTPROD_GENERIC_H_
 
-void
+#include <gr_core_api.h>
+
+GR_CORE_API void
 complex_dotprod_generic (const short *input,
 		       const float *taps, unsigned n_2_complex_blocks,
 		       float *result);
diff --git a/gnuradio-core/src/lib/filter/dotprod_fff_altivec.h b/gnuradio-core/src/lib/filter/dotprod_fff_altivec.h
index d9ee52cf06..af92103821 100644
--- a/gnuradio-core/src/lib/filter/dotprod_fff_altivec.h
+++ b/gnuradio-core/src/lib/filter/dotprod_fff_altivec.h
@@ -21,6 +21,7 @@
 #ifndef INCLUDED_DOTPROD_FFF_ALTIVEC_H
 #define INCLUDED_DOTPROD_FFF_ALTIVEC_H
 
+#include <gr_core_api.h>
 #include <stddef.h>
 
 #ifdef __cplusplus
diff --git a/gnuradio-core/src/lib/filter/dotprod_fff_armv7_a.h b/gnuradio-core/src/lib/filter/dotprod_fff_armv7_a.h
index e72621a0dd..667ee5fb61 100644
--- a/gnuradio-core/src/lib/filter/dotprod_fff_armv7_a.h
+++ b/gnuradio-core/src/lib/filter/dotprod_fff_armv7_a.h
@@ -21,6 +21,7 @@
 #ifndef INCLUDED_DOTPROD_FFF_ARMV7_A_H
 #define INCLUDED_DOTPROD_FFF_ARMV7_A_H
 
+#include <gr_core_api.h>
 #include <stddef.h>
 
 #ifdef __cplusplus
diff --git a/gnuradio-core/src/lib/filter/generate_gr_fir_util.py b/gnuradio-core/src/lib/filter/generate_gr_fir_util.py
index 4f5f5ce06a..06001695e2 100755
--- a/gnuradio-core/src/lib/filter/generate_gr_fir_util.py
+++ b/gnuradio-core/src/lib/filter/generate_gr_fir_util.py
@@ -25,7 +25,7 @@ from generate_utils import *
 def make_info_struct (out, sig):
     out.write (
 '''
-struct gr_fir_%s_info {
+struct GR_CORE_API gr_fir_%s_info {
   const char    *name;             // implementation name, e.g., "generic", "SSE", "3DNow!"
   gr_fir_%s	*(*create)(const std::vector<%s> &taps);
 };
@@ -74,6 +74,7 @@ def make_gr_fir_util_h ():
  * 'i' (short)
  */
 
+#include <gr_core_api.h>
 #include <gr_types.h>
 
 ''')
@@ -87,7 +88,7 @@ def make_gr_fir_util_h ():
         make_info_struct (out, sig)
 
     out.write ('''
-struct gr_fir_util {
+struct GR_CORE_API gr_fir_util {
 
   // create a fast version of gr_fir_XXX.
 
diff --git a/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccc.h b/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccc.h
index 8678255b74..aa5422a077 100644
--- a/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccc.h
+++ b/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccc.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_ADAPTIVE_FIR_CCC_H
 #define	INCLUDED_GR_ADAPTIVE_FIR_CCC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_decimator.h>
 
 /*!
  * \brief Adaptive FIR filter with gr_complex input, gr_complex output and float taps
  * \ingroup filter_blk
  */
-class gr_adaptive_fir_ccc : public gr_sync_decimator
+class GR_CORE_API gr_adaptive_fir_ccc : public gr_sync_decimator
 {
 private:
   std::vector<gr_complex>  d_new_taps;
diff --git a/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.h b/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.h
index f860f4faa1..87854201cb 100644
--- a/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.h
+++ b/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_ADAPTIVE_FIR_CCF_H
 #define	INCLUDED_GR_ADAPTIVE_FIR_CCF_H
 
+#include <gr_core_api.h>
 #include <gr_sync_decimator.h>
 
 /*!
  * \brief Adaptive FIR filter with gr_complex input, gr_complex output and float taps
  * \ingroup filter_blk
  */
-class gr_adaptive_fir_ccf : public gr_sync_decimator
+class GR_CORE_API gr_adaptive_fir_ccf : public gr_sync_decimator
 {
 private:
   std::vector<float>  d_new_taps;
diff --git a/gnuradio-core/src/lib/filter/gr_altivec.h b/gnuradio-core/src/lib/filter/gr_altivec.h
index c0d7cfb343..eb941ce422 100644
--- a/gnuradio-core/src/lib/filter/gr_altivec.h
+++ b/gnuradio-core/src/lib/filter/gr_altivec.h
@@ -29,6 +29,7 @@
  * (included below)
  */
 
+#include <gr_core_api.h>
 #include <altivec.h>
 #undef bool		// repair namespace pollution
 #undef vector		// repair namespace pollution
@@ -55,8 +56,8 @@ union v_float_u {
   float		f[FLOATS_PER_VEC];
 };
 
-void gr_print_vector_float(FILE *fp, vec_float4 v);
-void gr_pvf(FILE *fp, const char *label, vec_float4 v);
+GR_CORE_API void gr_print_vector_float(FILE *fp, vec_float4 v);
+GR_CORE_API void gr_pvf(FILE *fp, const char *label, vec_float4 v);
 
 static inline float
 horizontal_add_f(vec_float4 v)
diff --git a/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.h b/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.h
index c78047c16d..73916a3151 100644
--- a/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.h
+++ b/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.h
@@ -23,25 +23,26 @@
 #ifndef INCLUDED_GR_CMA_EQUALIZER_CC_H
 #define	INCLUDED_GR_CMA_EQUALIZER_CC_H
 
+#include <gr_core_api.h>
 #include <gr_adaptive_fir_ccf.h>
 
 class gr_cma_equalizer_cc;
 typedef boost::shared_ptr<gr_cma_equalizer_cc> gr_cma_equalizer_cc_sptr;
 
-gr_cma_equalizer_cc_sptr 
+GR_CORE_API gr_cma_equalizer_cc_sptr 
 gr_make_cma_equalizer_cc(int num_taps, float modulus, float mu);
 
 /*!
  * \brief Implements constant modulus adaptive filter on complex stream
  * \ingroup eq_blk
  */
-class gr_cma_equalizer_cc : public gr_adaptive_fir_ccf
+class GR_CORE_API gr_cma_equalizer_cc : public gr_adaptive_fir_ccf
 {
 private:
   float d_modulus;
   float d_mu;
   
-  friend gr_cma_equalizer_cc_sptr gr_make_cma_equalizer_cc(int num_taps, float modulus, float mu);
+  friend GR_CORE_API gr_cma_equalizer_cc_sptr gr_make_cma_equalizer_cc(int num_taps, float modulus, float mu);
   gr_cma_equalizer_cc(int num_taps, float modulus, float mu);
 
 protected:
diff --git a/gnuradio-core/src/lib/filter/gr_cpu.h b/gnuradio-core/src/lib/filter/gr_cpu.h
index 01d719020a..149404082d 100644
--- a/gnuradio-core/src/lib/filter/gr_cpu.h
+++ b/gnuradio-core/src/lib/filter/gr_cpu.h
@@ -23,7 +23,9 @@
 #ifndef _GR_CPU_H_
 #define _GR_CPU_H_
 
-struct gr_cpu {
+#include <gr_core_api.h>
+
+struct GR_CORE_API gr_cpu {
   static bool has_mmx ();
   static bool has_sse ();
   static bool has_sse2 ();
@@ -37,4 +39,4 @@ struct gr_cpu {
   static bool has_armv7_a ();
 };
 
-#endif /* _GR_CPU_H_ */
+#endif /* _GR_CPU_H_ */
\ No newline at end of file
diff --git a/gnuradio-core/src/lib/filter/gr_dc_blocker_cc.h b/gnuradio-core/src/lib/filter/gr_dc_blocker_cc.h
index de9ccc0eab..7d04b523ac 100644
--- a/gnuradio-core/src/lib/filter/gr_dc_blocker_cc.h
+++ b/gnuradio-core/src/lib/filter/gr_dc_blocker_cc.h
@@ -24,12 +24,13 @@
 #ifndef INCLUDED_GR_DC_BLOCKER_CC_H
 #define	INCLUDED_GR_DC_BLOCKER_CC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <deque>
 
 class gr_dc_blocker_cc;
 typedef boost::shared_ptr<gr_dc_blocker_cc> gr_dc_blocker_cc_sptr;
-gr_dc_blocker_cc_sptr gr_make_dc_blocker_cc (int D=32, bool long_form=true);
+GR_CORE_API gr_dc_blocker_cc_sptr gr_make_dc_blocker_cc (int D=32, bool long_form=true);
 
 /*!
  * \class gr_dc_blocker_cc
@@ -57,7 +58,7 @@ gr_dc_blocker_cc_sptr gr_make_dc_blocker_cc (int D=32, bool long_form=true);
  *    <B><EM>R. Yates, "DC Blocker Algorithms," IEEE Signal Processing Magazine,
  *        Mar. 2008, pp 132-134.</EM></B>
  */
-class moving_averager_c
+class GR_CORE_API moving_averager_c
 {
 public:
   moving_averager_c(int D);
@@ -72,7 +73,7 @@ private:
   std::deque<gr_complex> d_delay_line;
 };
 
-class gr_dc_blocker_cc : public gr_sync_block
+class GR_CORE_API gr_dc_blocker_cc : public gr_sync_block
 {
  private:
   /*!
@@ -81,7 +82,7 @@ class gr_dc_blocker_cc : public gr_sync_block
    * \param long_form  (bool) whether to use long (true, default) or short form
    * \param channel (unsigned integer) Selects the channel to return [default=0].
    */
-  friend gr_dc_blocker_cc_sptr gr_make_dc_blocker_cc (int D, bool long_form);
+  GR_CORE_API friend gr_dc_blocker_cc_sptr gr_make_dc_blocker_cc (int D, bool long_form);
 
   int d_length;
   bool d_long_form;
diff --git a/gnuradio-core/src/lib/filter/gr_dc_blocker_ff.h b/gnuradio-core/src/lib/filter/gr_dc_blocker_ff.h
index b632d81da6..6c6f93b8a8 100644
--- a/gnuradio-core/src/lib/filter/gr_dc_blocker_ff.h
+++ b/gnuradio-core/src/lib/filter/gr_dc_blocker_ff.h
@@ -24,12 +24,13 @@
 #ifndef INCLUDED_GR_DC_BLOCKER_FF_H
 #define	INCLUDED_GR_DC_BLOCKER_FF_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <deque>
 
 class gr_dc_blocker_ff;
 typedef boost::shared_ptr<gr_dc_blocker_ff> gr_dc_blocker_ff_sptr;
-gr_dc_blocker_ff_sptr gr_make_dc_blocker_ff (int D=32, bool long_form=true);
+GR_CORE_API gr_dc_blocker_ff_sptr gr_make_dc_blocker_ff (int D=32, bool long_form=true);
 
 /*!
  * \class gr_dc_blocker_ff
@@ -57,7 +58,7 @@ gr_dc_blocker_ff_sptr gr_make_dc_blocker_ff (int D=32, bool long_form=true);
  *    <B><EM>R. Yates, "DC Blocker Algorithms," IEEE Signal Processing Magazine,
  *        Mar. 2008, pp 132-134.</EM></B>
  */
-class moving_averager_f
+class GR_CORE_API moving_averager_f
 {
 public:
   moving_averager_f(int D);
@@ -72,7 +73,7 @@ private:
   std::deque<float> d_delay_line;
 };
 
-class gr_dc_blocker_ff : public gr_sync_block
+class GR_CORE_API gr_dc_blocker_ff : public gr_sync_block
 {
  private:
   /*!
@@ -81,7 +82,7 @@ class gr_dc_blocker_ff : public gr_sync_block
    * \param long_form  (bool) whether to use long (true, default) or short form
    * \param channel (unsigned integer) Selects the channel to return [default=0].
    */
-  friend gr_dc_blocker_ff_sptr gr_make_dc_blocker_ff (int D, bool long_form);
+  GR_CORE_API friend gr_dc_blocker_ff_sptr gr_make_dc_blocker_ff (int D, bool long_form);
 
   int d_length;
   bool d_long_form;
diff --git a/gnuradio-core/src/lib/filter/gr_fft_filter_ccc.h b/gnuradio-core/src/lib/filter/gr_fft_filter_ccc.h
index 68b19e775b..721a44a837 100644
--- a/gnuradio-core/src/lib/filter/gr_fft_filter_ccc.h
+++ b/gnuradio-core/src/lib/filter/gr_fft_filter_ccc.h
@@ -22,11 +22,12 @@
 #ifndef INCLUDED_GR_FFT_FILTER_CCC_H
 #define INCLUDED_GR_FFT_FILTER_CCC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_decimator.h>
 
 class gr_fft_filter_ccc;
 typedef boost::shared_ptr<gr_fft_filter_ccc> gr_fft_filter_ccc_sptr;
-gr_fft_filter_ccc_sptr gr_make_fft_filter_ccc (int decimation, const std::vector<gr_complex> &taps);
+GR_CORE_API gr_fft_filter_ccc_sptr gr_make_fft_filter_ccc (int decimation, const std::vector<gr_complex> &taps);
 
 //class gri_fft_filter_ccc_sse;
 class gri_fft_filter_ccc_generic;
@@ -35,10 +36,10 @@ class gri_fft_filter_ccc_generic;
  * \brief Fast FFT filter with gr_complex input, gr_complex output and gr_complex taps
  * \ingroup filter_blk
  */
-class gr_fft_filter_ccc : public gr_sync_decimator
+class GR_CORE_API gr_fft_filter_ccc : public gr_sync_decimator
 {
  private:
-  friend gr_fft_filter_ccc_sptr gr_make_fft_filter_ccc (int decimation, const std::vector<gr_complex> &taps);
+  friend GR_CORE_API gr_fft_filter_ccc_sptr gr_make_fft_filter_ccc (int decimation, const std::vector<gr_complex> &taps);
 
   int			   d_nsamples;
   bool			   d_updated;
diff --git a/gnuradio-core/src/lib/filter/gr_fft_filter_fff.h b/gnuradio-core/src/lib/filter/gr_fft_filter_fff.h
index 6eaa21500a..b0dc748833 100644
--- a/gnuradio-core/src/lib/filter/gr_fft_filter_fff.h
+++ b/gnuradio-core/src/lib/filter/gr_fft_filter_fff.h
@@ -22,11 +22,12 @@
 #ifndef INCLUDED_GR_FFT_FILTER_FFF_H
 #define INCLUDED_GR_FFT_FILTER_FFF_H
 
+#include <gr_core_api.h>
 #include <gr_sync_decimator.h>
 
 class gr_fft_filter_fff;
 typedef boost::shared_ptr<gr_fft_filter_fff> gr_fft_filter_fff_sptr;
-gr_fft_filter_fff_sptr gr_make_fft_filter_fff (int decimation, const std::vector<float> &taps);
+GR_CORE_API gr_fft_filter_fff_sptr gr_make_fft_filter_fff (int decimation, const std::vector<float> &taps);
 
 class gri_fft_filter_fff_generic;
 //class gri_fft_filter_fff_sse;
@@ -35,10 +36,10 @@ class gri_fft_filter_fff_generic;
  * \brief Fast FFT filter with float input, float output and float taps
  * \ingroup filter_blk
  */
-class gr_fft_filter_fff : public gr_sync_decimator
+class GR_CORE_API gr_fft_filter_fff : public gr_sync_decimator
 {
  private:
-  friend gr_fft_filter_fff_sptr gr_make_fft_filter_fff (int decimation, const std::vector<float> &taps);
+  friend GR_CORE_API gr_fft_filter_fff_sptr gr_make_fft_filter_fff (int decimation, const std::vector<float> &taps);
 
   int			   d_nsamples;
   bool			   d_updated;
diff --git a/gnuradio-core/src/lib/filter/gr_filter_delay_fc.h b/gnuradio-core/src/lib/filter/gr_filter_delay_fc.h
index 946edf2c74..e09e4f0df8 100644
--- a/gnuradio-core/src/lib/filter/gr_filter_delay_fc.h
+++ b/gnuradio-core/src/lib/filter/gr_filter_delay_fc.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_FILTER_DELAY_FC_H
 #define INCLUDED_GR_FILTER_DELAY_FC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_io_signature.h>
 #include <gr_types.h>
@@ -31,7 +32,7 @@ class gr_filter_delay_fc;
 typedef boost::shared_ptr<gr_filter_delay_fc> gr_filter_delay_fc_sptr;
 
 // public constructor
-gr_filter_delay_fc_sptr gr_make_filter_delay_fc (const std::vector<float> &taps);
+GR_CORE_API gr_filter_delay_fc_sptr gr_make_filter_delay_fc (const std::vector<float> &taps);
 
 class gr_fir_fff;
 
@@ -50,7 +51,7 @@ class gr_fir_fff;
  * before initializing this block.
  *
  */
-class gr_filter_delay_fc : public gr_sync_block
+class GR_CORE_API gr_filter_delay_fc : public gr_sync_block
 {
  public:
   ~gr_filter_delay_fc ();
@@ -66,7 +67,7 @@ class gr_filter_delay_fc : public gr_sync_block
   unsigned int  d_delay;
   gr_fir_fff	*d_fir;
 
-  friend gr_filter_delay_fc_sptr gr_make_filter_delay_fc (const std::vector<float> &taps);
+  friend GR_CORE_API gr_filter_delay_fc_sptr gr_make_filter_delay_fc (const std::vector<float> &taps);
 };
 
 #endif /* INCLUDED_GR_FILTER_DELAY_FC_H */
diff --git a/gnuradio-core/src/lib/filter/gr_fir_XXX.h.t b/gnuradio-core/src/lib/filter/gr_fir_XXX.h.t
index eeee716ec3..f6019ea401 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_XXX.h.t
+++ b/gnuradio-core/src/lib/filter/gr_fir_XXX.h.t
@@ -29,6 +29,7 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <vector>
 @VRCOMPLEX_INCLUDE@
 #include <gr_reverse.h>
@@ -44,7 +45,7 @@
  * I,O,T are elements of the set 's' (short), 'f' (float), 'c' (gr_complex), 'i' (int)
  */
 
-class @FIR_TYPE@ {
+class GR_CORE_API @FIR_TYPE@ {
 
 protected:
   std::vector<@TAP_TYPE@>	d_taps;		// reversed taps
diff --git a/gnuradio-core/src/lib/filter/gr_fir_XXX_generic.h.t b/gnuradio-core/src/lib/filter/gr_fir_XXX_generic.h.t
index fc0f4f8b25..b3594b7ad3 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_XXX_generic.h.t
+++ b/gnuradio-core/src/lib/filter/gr_fir_XXX_generic.h.t
@@ -22,6 +22,7 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <@FIR_TYPE@.h>
 
 /*!
@@ -32,7 +33,7 @@
  * I,O,T are elements of the set 's' (short), 'f' (float), 'c' (gr_complex), 'i' (int)
  */
 
-class @FIR_TYPE@_generic : public @FIR_TYPE@ {
+class GR_CORE_API @FIR_TYPE@_generic : public @FIR_TYPE@ {
 
 public:
 
diff --git a/gnuradio-core/src/lib/filter/gr_fir_ccc_simd.h b/gnuradio-core/src/lib/filter/gr_fir_ccc_simd.h
index 14ff1e6b16..af61ce2748 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_ccc_simd.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_ccc_simd.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_FIR_CCC_SIMD_H
 #define INCLUDED_GR_FIR_CCC_SIMD_H
 
+#include <gr_core_api.h>
 #include <gr_fir_ccc_generic.h>
 
 /*!
@@ -32,7 +33,7 @@
  * subclasses.
  */
 
-class gr_fir_ccc_simd : public gr_fir_ccc_generic
+class GR_CORE_API gr_fir_ccc_simd : public gr_fir_ccc_generic
 {
 protected:
   typedef void (*ccomplex_dotprod_t)(const float *input,
diff --git a/gnuradio-core/src/lib/filter/gr_fir_ccc_x86.h b/gnuradio-core/src/lib/filter/gr_fir_ccc_x86.h
index 06d6b616ce..262cc80e3f 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_ccc_x86.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_ccc_x86.h
@@ -23,19 +23,20 @@
 #ifndef INCLUDED_GR_FIR_CCC_X86_H
 #define INCLUDED_GR_FIR_CCC_X86_H
 
+#include <gr_core_api.h>
 #include <gr_fir_ccc_simd.h>
 
 /*!
  * \brief 3DNow! version of gr_fir_ccc
  */
-class gr_fir_ccc_3dnow : public gr_fir_ccc_simd
+class GR_CORE_API gr_fir_ccc_3dnow : public gr_fir_ccc_simd
 {
 public:
   gr_fir_ccc_3dnow ();
   gr_fir_ccc_3dnow (const std::vector<gr_complex> &taps);
 };
 
-class gr_fir_ccc_3dnowext : public gr_fir_ccc_simd
+class GR_CORE_API gr_fir_ccc_3dnowext : public gr_fir_ccc_simd
 {
 public:
   gr_fir_ccc_3dnowext ();
@@ -45,7 +46,7 @@ public:
 /*!
  * \brief SSE version of gr_fir_ccc
  */
-class gr_fir_ccc_sse : public gr_fir_ccc_simd
+class GR_CORE_API gr_fir_ccc_sse : public gr_fir_ccc_simd
 {
 public:
   gr_fir_ccc_sse ();
diff --git a/gnuradio-core/src/lib/filter/gr_fir_ccf_simd.h b/gnuradio-core/src/lib/filter/gr_fir_ccf_simd.h
index ebc6a1bc0c..31d70288e1 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_ccf_simd.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_ccf_simd.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_FIR_CCF_SIMD_H
 #define INCLUDED_GR_FIR_CCF_SIMD_H
 
+#include <gr_core_api.h>
 #include <gr_fir_ccf_generic.h>
 
 
@@ -33,7 +34,7 @@
  * subclasses.
  */
 
-class gr_fir_ccf_simd : public gr_fir_ccf_generic
+class GR_CORE_API gr_fir_ccf_simd : public gr_fir_ccf_generic
 {
 protected:
   typedef void (*fcomplex_dotprod_t)(const float *taps,
diff --git a/gnuradio-core/src/lib/filter/gr_fir_ccf_x86.h b/gnuradio-core/src/lib/filter/gr_fir_ccf_x86.h
index 7f936546f1..38d82060c1 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_ccf_x86.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_ccf_x86.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_FIR_CCF_X86_H
 #define INCLUDED_GR_FIR_CCF_X86_H
 
+#include <gr_core_api.h>
 #include <gr_fir_ccf_simd.h>
 
 /*!
  * \brief 3DNow! version of gr_fir_ccf
  * \ingroup filter_primitive
  */
-class gr_fir_ccf_3dnow : public gr_fir_ccf_simd
+class GR_CORE_API gr_fir_ccf_3dnow : public gr_fir_ccf_simd
 {
 public:
   gr_fir_ccf_3dnow ();
@@ -40,7 +41,7 @@ public:
  * \brief SSE version of gr_fir_ccf
  * \ingroup filter_primitive
  */
-class gr_fir_ccf_sse : public gr_fir_ccf_simd
+class GR_CORE_API gr_fir_ccf_sse : public gr_fir_ccf_simd
 {
 public:
   gr_fir_ccf_sse ();
diff --git a/gnuradio-core/src/lib/filter/gr_fir_fcc_simd.h b/gnuradio-core/src/lib/filter/gr_fir_fcc_simd.h
index e2ed8bcae8..7be3776e3f 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_fcc_simd.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_fcc_simd.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_FIR_FCC_SIMD_H
 #define INCLUDED_GR_FIR_FCC_SIMD_H
 
+#include <gr_core_api.h>
 #include <gr_fir_fcc_generic.h>
 
 
@@ -33,7 +34,7 @@
  * subclasses.
  */
 
-class gr_fir_fcc_simd : public gr_fir_fcc_generic
+class GR_CORE_API gr_fir_fcc_simd : public gr_fir_fcc_generic
 {
 protected:
   typedef void (*fcomplex_dotprod_t)(const float *input,
diff --git a/gnuradio-core/src/lib/filter/gr_fir_fcc_x86.h b/gnuradio-core/src/lib/filter/gr_fir_fcc_x86.h
index 49386c35d3..98ace66de9 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_fcc_x86.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_fcc_x86.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_FIR_FCC_X86_H
 #define INCLUDED_GR_FIR_FCC_X86_H
 
+#include <gr_core_api.h>
 #include <gr_fir_fcc_simd.h>
 
 /*!
  * \brief 3DNow! version of gr_fir_fcc
  * \ingroup filter_primitive
  */
-class gr_fir_fcc_3dnow : public gr_fir_fcc_simd
+class GR_CORE_API gr_fir_fcc_3dnow : public gr_fir_fcc_simd
 {
 public:
   gr_fir_fcc_3dnow ();
@@ -40,7 +41,7 @@ public:
  * \brief SSE version of gr_fir_fcc
  * \ingroup filter_blk
  */
-class gr_fir_fcc_sse : public gr_fir_fcc_simd
+class GR_CORE_API gr_fir_fcc_sse : public gr_fir_fcc_simd
 {
 public:
   gr_fir_fcc_sse ();
diff --git a/gnuradio-core/src/lib/filter/gr_fir_fff_altivec.h b/gnuradio-core/src/lib/filter/gr_fir_fff_altivec.h
index 1694f55243..29bb3a899f 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_fff_altivec.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_fff_altivec.h
@@ -21,12 +21,13 @@
 #ifndef INCLUDED_GR_FIR_FFF_ALTIVEC_H
 #define INCLUDED_GR_FIR_FFF_ALTIVEC_H
 
+#include <gr_core_api.h>
 #include <gr_fir_fff_generic.h>
 
 /*!
  * \brief altivec version of gr_fir_fff
  */
-class gr_fir_fff_altivec : public gr_fir_fff_generic
+class GR_CORE_API gr_fir_fff_altivec : public gr_fir_fff_generic
 {
 protected:
 
diff --git a/gnuradio-core/src/lib/filter/gr_fir_fff_armv7_a.h b/gnuradio-core/src/lib/filter/gr_fir_fff_armv7_a.h
index d6097cf504..5c80c930fc 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_fff_armv7_a.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_fff_armv7_a.h
@@ -21,12 +21,13 @@
 #ifndef INCLUDED_GR_FIR_FFF_ARMV7_A_H
 #define INCLUDED_GR_FIR_FFF_ARMV7_A_H
 
+#include <gr_core_api.h>
 #include <gr_fir_fff_generic.h>
 
 /*!
  * \brief armv7_a using NEON coprocessor version of gr_fir_fff
  */
-class gr_fir_fff_armv7_a : public gr_fir_fff_generic
+class GR_CORE_API gr_fir_fff_armv7_a : public gr_fir_fff_generic
 {
 protected:
 
diff --git a/gnuradio-core/src/lib/filter/gr_fir_fff_simd.h b/gnuradio-core/src/lib/filter/gr_fir_fff_simd.h
index 82d3e3b99b..781e4e7b95 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_fff_simd.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_fff_simd.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_FIR_FFF_SIMD_H
 #define INCLUDED_GR_FIR_FFF_SIMD_H
 
+#include <gr_core_api.h>
 #include <gr_fir_fff_generic.h>
 
 /*!
@@ -32,7 +33,7 @@
  * subclasses.
  */
 
-class gr_fir_fff_simd : public gr_fir_fff_generic
+class GR_CORE_API gr_fir_fff_simd : public gr_fir_fff_generic
 {
 protected:
   typedef float (*float_dotprod_t)(const float *input,
diff --git a/gnuradio-core/src/lib/filter/gr_fir_fff_x86.h b/gnuradio-core/src/lib/filter/gr_fir_fff_x86.h
index c288035bab..4e2f33181b 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_fff_x86.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_fff_x86.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_FIR_FFF_X86_H
 #define INCLUDED_GR_FIR_FFF_X86_H
 
+#include <gr_core_api.h>
 #include <gr_fir_fff_simd.h>
 
 /*!
  * \brief 3DNow! version of gr_fir_fff
  */
-class gr_fir_fff_3dnow : public gr_fir_fff_simd
+class GR_CORE_API gr_fir_fff_3dnow : public gr_fir_fff_simd
 {
 public:
   gr_fir_fff_3dnow ();
@@ -38,7 +39,7 @@ public:
 /*!
  * \brief SSE version of gr_fir_fff
  */
-class gr_fir_fff_sse : public gr_fir_fff_simd
+class GR_CORE_API gr_fir_fff_sse : public gr_fir_fff_simd
 {
 public:
   gr_fir_fff_sse ();
diff --git a/gnuradio-core/src/lib/filter/gr_fir_filter_XXX.h.t b/gnuradio-core/src/lib/filter/gr_fir_filter_XXX.h.t
index f2e56c9017..db06255044 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_filter_XXX.h.t
+++ b/gnuradio-core/src/lib/filter/gr_fir_filter_XXX.h.t
@@ -28,11 +28,12 @@
 #ifndef @GUARD_NAME@
 #define	@GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_decimator.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (int decimation, const std::vector<@TAP_TYPE@> &taps);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (int decimation, const std::vector<@TAP_TYPE@> &taps);
 
 class @FIR_TYPE@;
 
@@ -40,10 +41,10 @@ class @FIR_TYPE@;
  * \brief FIR filter with @I_TYPE@ input, @O_TYPE@ output and @TAP_TYPE@ taps
  * \ingroup filter_blk
  */
-class @NAME@ : public gr_sync_decimator
+class GR_CORE_API @NAME@ : public gr_sync_decimator
 {
  private:
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ (int decimation, const std::vector<@TAP_TYPE@> &taps);
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (int decimation, const std::vector<@TAP_TYPE@> &taps);
 
   @FIR_TYPE@		*d_fir;
   std::vector<@TAP_TYPE@>	d_new_taps;
diff --git a/gnuradio-core/src/lib/filter/gr_fir_fsf_simd.h b/gnuradio-core/src/lib/filter/gr_fir_fsf_simd.h
index ad689407da..6fcb6bd35c 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_fsf_simd.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_fsf_simd.h
@@ -22,6 +22,7 @@
 #ifndef _GR_FIR_FSF_SIMD_H_
 #define _GR_FIR_FSF_SIMD_H_
 
+#include <gr_core_api.h>
 #include <gr_fir_fsf_generic.h>
 
 /*!
@@ -32,7 +33,7 @@
  * subclasses.
  */
 
-class gr_fir_fsf_simd : public gr_fir_fsf_generic
+class GR_CORE_API gr_fir_fsf_simd : public gr_fir_fsf_generic
 {
 protected:
   typedef float (*float_dotprod_t)(const float *input,
diff --git a/gnuradio-core/src/lib/filter/gr_fir_fsf_x86.h b/gnuradio-core/src/lib/filter/gr_fir_fsf_x86.h
index 78fdf73c06..0e11059b34 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_fsf_x86.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_fsf_x86.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_FIR_FSF_X86_H
 #define INCLUDED_GR_FIR_FSF_X86_H
 
+#include <gr_core_api.h>
 #include <gr_fir_fsf_simd.h>
 
 /*!
  * \brief 3DNow! version of gr_fir_fsf
  * \ingroup filter_primitive
  */
-class gr_fir_fsf_3dnow : public gr_fir_fsf_simd
+class GR_CORE_API gr_fir_fsf_3dnow : public gr_fir_fsf_simd
 {
 public:
   gr_fir_fsf_3dnow ();
@@ -40,7 +41,7 @@ public:
  * \brief SSE version of gr_fir_fsf
  * \ingroup filter_primitive
  */
-class gr_fir_fsf_sse : public gr_fir_fsf_simd
+class GR_CORE_API gr_fir_fsf_sse : public gr_fir_fsf_simd
 {
 public:
   gr_fir_fsf_sse ();
diff --git a/gnuradio-core/src/lib/filter/gr_fir_scc_simd.h b/gnuradio-core/src/lib/filter/gr_fir_scc_simd.h
index 2af45c8f48..9dced15789 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_scc_simd.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_scc_simd.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_FIR_SCC_SIMD_H
 #define INCLUDED_GR_FIR_SCC_SIMD_H
 
+#include <gr_core_api.h>
 #include <gr_fir_scc_generic.h>
 
 
@@ -32,7 +33,7 @@
  * This base class handles alignment issues common to SSE and 3DNOW
  * subclasses.
  */
-class gr_fir_scc_simd : public gr_fir_scc_generic
+class GR_CORE_API gr_fir_scc_simd : public gr_fir_scc_generic
 {
 protected:
   typedef void (*complex_dotprod_t)(const short *input,
diff --git a/gnuradio-core/src/lib/filter/gr_fir_scc_x86.h b/gnuradio-core/src/lib/filter/gr_fir_scc_x86.h
index 0cb5e3f7cd..484bdc5a05 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_scc_x86.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_scc_x86.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_FIR_SCC_X86_H
 #define INCLUDED_GR_FIR_SCC_X86_H
 
+#include <gr_core_api.h>
 #include <gr_fir_scc_simd.h>
 
 /*!
  * \brief 3DNow! version of gr_fir_scc
  */
-class gr_fir_scc_3dnow : public gr_fir_scc_simd
+class GR_CORE_API gr_fir_scc_3dnow : public gr_fir_scc_simd
 {
 public:
   gr_fir_scc_3dnow ();
@@ -38,7 +39,7 @@ public:
 /*!
  * \brief 3DNow! Ext version of gr_fir_scc
  */
-class gr_fir_scc_3dnowext : public gr_fir_scc_simd
+class GR_CORE_API gr_fir_scc_3dnowext : public gr_fir_scc_simd
 {
 public:
   gr_fir_scc_3dnowext ();
@@ -48,7 +49,7 @@ public:
 /*!
  * \brief SSE version of gr_fir_scc
  */
-class gr_fir_scc_sse : public gr_fir_scc_simd
+class GR_CORE_API gr_fir_scc_sse : public gr_fir_scc_simd
 {
 public:
   gr_fir_scc_sse ();
diff --git a/gnuradio-core/src/lib/filter/gr_fir_sysconfig_armv7_a.h b/gnuradio-core/src/lib/filter/gr_fir_sysconfig_armv7_a.h
index c77b810263..69ee46019a 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_sysconfig_armv7_a.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_sysconfig_armv7_a.h
@@ -22,9 +22,10 @@
 #ifndef INCLUDED_GR_FIR_SYSCONFIG_ARMV7_A_H
 #define INCLUDED_GR_FIR_SYSCONFIG_ARMV7_A_H
 
+#include <gr_core_api.h>
 #include <gr_fir_sysconfig_generic.h>
 
-class gr_fir_sysconfig_armv7_a : public gr_fir_sysconfig_generic {
+class GR_CORE_API gr_fir_sysconfig_armv7_a : public gr_fir_sysconfig_generic {
 public:
   virtual gr_fir_ccf *create_gr_fir_ccf (const std::vector<float> &taps);
   virtual gr_fir_fcc *create_gr_fir_fcc (const std::vector<gr_complex> &taps);
diff --git a/gnuradio-core/src/lib/filter/gr_fir_sysconfig_powerpc.h b/gnuradio-core/src/lib/filter/gr_fir_sysconfig_powerpc.h
index 9c31cdf1b7..d6be7653fc 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_sysconfig_powerpc.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_sysconfig_powerpc.h
@@ -22,9 +22,10 @@
 #ifndef INCLUDED_GR_FIR_SYSCONFIG_POWERPC_H
 #define INCLUDED_GR_FIR_SYSCONFIG_POWERPC_H
 
+#include <gr_core_api.h>
 #include <gr_fir_sysconfig_generic.h>
 
-class gr_fir_sysconfig_powerpc : public gr_fir_sysconfig_generic {
+class GR_CORE_API gr_fir_sysconfig_powerpc : public gr_fir_sysconfig_generic {
 public:
   virtual gr_fir_ccf *create_gr_fir_ccf (const std::vector<float> &taps);
   virtual gr_fir_fcc *create_gr_fir_fcc (const std::vector<gr_complex> &taps);
diff --git a/gnuradio-core/src/lib/filter/gr_fir_sysconfig_x86.h b/gnuradio-core/src/lib/filter/gr_fir_sysconfig_x86.h
index a4d0f92b01..49899d8955 100644
--- a/gnuradio-core/src/lib/filter/gr_fir_sysconfig_x86.h
+++ b/gnuradio-core/src/lib/filter/gr_fir_sysconfig_x86.h
@@ -22,9 +22,10 @@
 #ifndef INCLUDED_GR_FIR_SYSCONFIG_X86_H
 #define INCLUDED_GR_FIR_SYSCONFIG_X86_H
 
+#include <gr_core_api.h>
 #include <gr_fir_sysconfig_generic.h>
 
-class gr_fir_sysconfig_x86 : public gr_fir_sysconfig_generic {
+class GR_CORE_API gr_fir_sysconfig_x86 : public gr_fir_sysconfig_generic {
 public:
   virtual gr_fir_ccf *create_gr_fir_ccf (const std::vector<float> &taps);
   virtual gr_fir_fcc *create_gr_fir_fcc (const std::vector<gr_complex> &taps);
diff --git a/gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.h b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.h
index c8378c43eb..29c67895a4 100644
--- a/gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.h
+++ b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_FRACTIONAL_INTERPOLATOR_CC_H
 #define	INCLUDED_GR_FRACTIONAL_INTERPOLATOR_CC_H
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 
 class gri_mmse_fir_interpolator_cc;
@@ -31,13 +32,13 @@ class gr_fractional_interpolator_cc;
 typedef boost::shared_ptr<gr_fractional_interpolator_cc> gr_fractional_interpolator_cc_sptr;
 
 // public constructor
-gr_fractional_interpolator_cc_sptr gr_make_fractional_interpolator_cc (float phase_shift, float interp_ratio);
+GR_CORE_API gr_fractional_interpolator_cc_sptr gr_make_fractional_interpolator_cc (float phase_shift, float interp_ratio);
 
 /*!
  * \brief Interpolating mmse filter with gr_complex input, gr_complex output
  * \ingroup filter_blk
  */
-class gr_fractional_interpolator_cc : public gr_block
+class GR_CORE_API gr_fractional_interpolator_cc : public gr_block
 {
 public:
   ~gr_fractional_interpolator_cc ();
@@ -60,7 +61,7 @@ private:
   float 			d_mu_inc;
   gri_mmse_fir_interpolator_cc 	*d_interp;
 
-  friend gr_fractional_interpolator_cc_sptr
+  friend GR_CORE_API gr_fractional_interpolator_cc_sptr
   gr_make_fractional_interpolator_cc (float phase_shift, float interp_ratio);
 };
 
diff --git a/gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.h b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.h
index f501292893..7e000a6d1c 100644
--- a/gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.h
+++ b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_FRACTIONAL_INTERPOLATOR_FF_H
 #define	INCLUDED_GR_FRACTIONAL_INTERPOLATOR_FF_H
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 
 class gri_mmse_fir_interpolator;
@@ -31,13 +32,13 @@ class gr_fractional_interpolator_ff;
 typedef boost::shared_ptr<gr_fractional_interpolator_ff> gr_fractional_interpolator_ff_sptr;
 
 // public constructor
-gr_fractional_interpolator_ff_sptr gr_make_fractional_interpolator_ff (float phase_shift, float interp_ratio);
+GR_CORE_API gr_fractional_interpolator_ff_sptr gr_make_fractional_interpolator_ff (float phase_shift, float interp_ratio);
 
 /*!
  * \brief Interpolating mmse filter with float input, float output
  * \ingroup filter_blk
  */
-class gr_fractional_interpolator_ff : public gr_block
+class GR_CORE_API gr_fractional_interpolator_ff : public gr_block
 {
 public:
   ~gr_fractional_interpolator_ff ();
@@ -60,7 +61,7 @@ private:
   float 			d_mu_inc;
   gri_mmse_fir_interpolator 	*d_interp;
 
-  friend gr_fractional_interpolator_ff_sptr
+  friend GR_CORE_API gr_fractional_interpolator_ff_sptr
   gr_make_fractional_interpolator_ff (float phase_shift, float interp_ratio);
 };
 
diff --git a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_XXX.h.t b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_XXX.h.t
index 1205e8a086..bb05c138b2 100644
--- a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_XXX.h.t
+++ b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_XXX.h.t
@@ -29,6 +29,7 @@
 #ifndef @GUARD_NAME@
 #define	@GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_decimator.h>
 #include <gr_rotator.h>
 
@@ -40,7 +41,7 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
  * translation that shifts center_freq down to zero Hz.  The frequency 
  * translation logically comes before the filtering operation.
  */
-@SPTR_NAME@ 
+GR_CORE_API @SPTR_NAME@ 
 gr_make_@BASE_NAME@ (int decimation, const std::vector<@TAP_TYPE@> &taps,
 		     double center_freq, double sampling_freq);
 
@@ -60,7 +61,7 @@ class @FIR_TYPE@;
  * Uses a single input array to produce a single output array.
  * Additional inputs and/or outputs are ignored.
  */
-class @NAME@ : public gr_sync_decimator
+class GR_CORE_API @NAME@ : public gr_sync_decimator
 {
  public:
   virtual ~@NAME@ ();
@@ -73,7 +74,7 @@ class @NAME@ : public gr_sync_decimator
 	    gr_vector_void_star &output_items);
 
  private:
-  friend @SPTR_NAME@ 
+  friend GR_CORE_API @SPTR_NAME@ 
   gr_make_@BASE_NAME@ (int decimation, const std::vector<@TAP_TYPE@> &taps,
 		       double center_freq, double sampling_freq);
 
diff --git a/gnuradio-core/src/lib/filter/gr_goertzel_fc.h b/gnuradio-core/src/lib/filter/gr_goertzel_fc.h
index c60b63d882..6b5d8527cb 100644
--- a/gnuradio-core/src/lib/filter/gr_goertzel_fc.h
+++ b/gnuradio-core/src/lib/filter/gr_goertzel_fc.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_GOERTZEL_FC_H
 #define INCLUDED_GR_GOERTZEL_FC_H
 
+#include <gr_core_api.h>
 #include <gri_goertzel.h>
 #include <gr_sync_decimator.h>
 
@@ -30,16 +31,16 @@ class gr_goertzel_fc;
 typedef boost::shared_ptr<gr_goertzel_fc> gr_goertzel_fc_sptr;
 
 // public constructor
-gr_goertzel_fc_sptr gr_make_goertzel_fc(int rate, int len, float freq);
+GR_CORE_API gr_goertzel_fc_sptr gr_make_goertzel_fc(int rate, int len, float freq);
 
 /*!
  * \brief Goertzel single-bin DFT calculation.
  * \ingroup dft_blk
  */
-class gr_goertzel_fc : public gr_sync_decimator
+class GR_CORE_API gr_goertzel_fc : public gr_sync_decimator
 {
 private:
-  friend gr_goertzel_fc_sptr gr_make_goertzel_fc (int rate, int len, float freq);
+  friend GR_CORE_API gr_goertzel_fc_sptr gr_make_goertzel_fc (int rate, int len, float freq);
 
   gr_goertzel_fc(int rate, int len, float freq);
   gri_goertzel d_goertzel;
diff --git a/gnuradio-core/src/lib/filter/gr_hilbert_fc.h b/gnuradio-core/src/lib/filter/gr_hilbert_fc.h
index adcac77931..ba73324ee4 100644
--- a/gnuradio-core/src/lib/filter/gr_hilbert_fc.h
+++ b/gnuradio-core/src/lib/filter/gr_hilbert_fc.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_HILBERT_FC_H
 #define INCLUDED_GR_HILBERT_FC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_io_signature.h>
 #include <gr_types.h>
@@ -31,7 +32,7 @@ class gr_hilbert_fc;
 typedef boost::shared_ptr<gr_hilbert_fc> gr_hilbert_fc_sptr;
 
 // public constructor
-gr_hilbert_fc_sptr gr_make_hilbert_fc (unsigned int ntaps);
+GR_CORE_API gr_hilbert_fc_sptr gr_make_hilbert_fc (unsigned int ntaps);
 
 
 class gr_fir_fff;
@@ -44,7 +45,7 @@ class gr_fir_fff;
  * imaginary output is hilbert filtered (90 degree phase shift)
  * version of input.
  */
-class gr_hilbert_fc : public gr_sync_block
+class GR_CORE_API gr_hilbert_fc : public gr_sync_block
 {
  public:
   ~gr_hilbert_fc ();
@@ -60,7 +61,7 @@ class gr_hilbert_fc : public gr_sync_block
   unsigned int	 d_ntaps;
   gr_fir_fff	*d_hilb;
 
-  friend gr_hilbert_fc_sptr gr_make_hilbert_fc (unsigned int ntaps);
+  friend GR_CORE_API gr_hilbert_fc_sptr gr_make_hilbert_fc (unsigned int ntaps);
 };
 
 
diff --git a/gnuradio-core/src/lib/filter/gr_iir_filter_ffd.h b/gnuradio-core/src/lib/filter/gr_iir_filter_ffd.h
index 0382646f10..386d056e58 100644
--- a/gnuradio-core/src/lib/filter/gr_iir_filter_ffd.h
+++ b/gnuradio-core/src/lib/filter/gr_iir_filter_ffd.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_IIR_FILTER_FFD_H
 #define	INCLUDED_GR_IIR_FILTER_FFD_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gri_iir.h>
 #include <stdexcept>
 
 class gr_iir_filter_ffd;
 typedef boost::shared_ptr<gr_iir_filter_ffd> gr_iir_filter_ffd_sptr;
-gr_iir_filter_ffd_sptr 
+GR_CORE_API gr_iir_filter_ffd_sptr 
 gr_make_iir_filter_ffd (const std::vector<double> &fftaps,
 			const std::vector<double> &fbtaps) throw (std::invalid_argument);
 
@@ -56,10 +57,10 @@ gr_make_iir_filter_ffd (const std::vector<double> &fftaps,
  * Note that some texts define the system function with a + in the denominator.
  * If you're using that convention, you'll need to negate the feedback taps.
  */
-class gr_iir_filter_ffd : public gr_sync_block
+class GR_CORE_API gr_iir_filter_ffd : public gr_sync_block
 {
  private:
-  friend gr_iir_filter_ffd_sptr 
+  friend GR_CORE_API gr_iir_filter_ffd_sptr 
   gr_make_iir_filter_ffd (const std::vector<double> &fftaps,
 			  const std::vector<double> &fbtaps) throw (std::invalid_argument);
 
diff --git a/gnuradio-core/src/lib/filter/gr_interp_fir_filter_XXX.h.t b/gnuradio-core/src/lib/filter/gr_interp_fir_filter_XXX.h.t
index 790e0b908b..4a3590fc75 100644
--- a/gnuradio-core/src/lib/filter/gr_interp_fir_filter_XXX.h.t
+++ b/gnuradio-core/src/lib/filter/gr_interp_fir_filter_XXX.h.t
@@ -28,11 +28,12 @@
 #ifndef @GUARD_NAME@
 #define	@GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_interpolator.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ gr_make_@BASE_NAME@ (unsigned interpolation, const std::vector<@TAP_TYPE@> &taps);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (unsigned interpolation, const std::vector<@TAP_TYPE@> &taps);
 
 class @FIR_TYPE@;
 
@@ -40,10 +41,10 @@ class @FIR_TYPE@;
  * \brief Interpolating FIR filter with @I_TYPE@ input, @O_TYPE@ output and @TAP_TYPE@ taps
  * \ingroup filter_blk
  */
-class @NAME@ : public gr_sync_interpolator
+class GR_CORE_API @NAME@ : public gr_sync_interpolator
 {
  private:
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ (unsigned interpolation, const std::vector<@TAP_TYPE@> &taps);
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (unsigned interpolation, const std::vector<@TAP_TYPE@> &taps);
 
   std::vector<@TAP_TYPE@>	d_new_taps;
   bool			d_updated;
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.h
index 2c36c95f9b..5d2ad0941e 100644
--- a/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.h
+++ b/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.h
@@ -24,11 +24,12 @@
 #ifndef INCLUDED_GR_PFB_ARB_RESAMPLER_CCF_H
 #define	INCLUDED_GR_PFB_ARB_RESAMPLER_CCF_H
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 
 class gr_pfb_arb_resampler_ccf;
 typedef boost::shared_ptr<gr_pfb_arb_resampler_ccf> gr_pfb_arb_resampler_ccf_sptr;
-gr_pfb_arb_resampler_ccf_sptr gr_make_pfb_arb_resampler_ccf (float rate,
+GR_CORE_API gr_pfb_arb_resampler_ccf_sptr gr_make_pfb_arb_resampler_ccf (float rate,
 							     const std::vector<float> &taps,
 							     unsigned int filter_size=32);
 
@@ -95,7 +96,7 @@ class gr_fir_ccf;
  *       Systems", Upper Saddle River, NJ: Prentice Hall, Inc. 2004.</EM></B>
  */
 
-class gr_pfb_arb_resampler_ccf : public gr_block
+class GR_CORE_API gr_pfb_arb_resampler_ccf : public gr_block
 {
  private:
   /*!
@@ -107,7 +108,7 @@ class gr_pfb_arb_resampler_ccf : public gr_block
                                        related to quantization noise introduced during the resampling.
 				       Defaults to 32 filters.
    */
-  friend gr_pfb_arb_resampler_ccf_sptr gr_make_pfb_arb_resampler_ccf (float rate,
+  friend GR_CORE_API gr_pfb_arb_resampler_ccf_sptr gr_make_pfb_arb_resampler_ccf (float rate,
 								      const std::vector<float> &taps,
 								      unsigned int filter_size);
 
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h
index 751673bc7a..56cb5ef40f 100644
--- a/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h
+++ b/gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h
@@ -24,11 +24,12 @@
 #ifndef INCLUDED_GR_PFB_CHANNELIZER_CCF_H
 #define	INCLUDED_GR_PFB_CHANNELIZER_CCF_H
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 
 class gr_pfb_channelizer_ccf;
 typedef boost::shared_ptr<gr_pfb_channelizer_ccf> gr_pfb_channelizer_ccf_sptr;
-gr_pfb_channelizer_ccf_sptr gr_make_pfb_channelizer_ccf (unsigned int numchans, 
+GR_CORE_API gr_pfb_channelizer_ccf_sptr gr_make_pfb_channelizer_ccf (unsigned int numchans, 
 							 const std::vector<float> &taps,
 							 float oversample_rate=1);
 
@@ -110,7 +111,7 @@ class gri_fft_complex;
  *
  */
 
-class gr_pfb_channelizer_ccf : public gr_block
+class GR_CORE_API gr_pfb_channelizer_ccf : public gr_block
 {
  private:
   /*!
@@ -130,7 +131,7 @@ class gr_pfb_channelizer_ccf : public gr_block
    *				      sample rate of a 6/1 oversample ratio is 6000 Hz, or
    *				      6 times the normal 1000 Hz.
    */
-  friend gr_pfb_channelizer_ccf_sptr gr_make_pfb_channelizer_ccf (unsigned int numchans,
+  friend GR_CORE_API gr_pfb_channelizer_ccf_sptr gr_make_pfb_channelizer_ccf (unsigned int numchans,
 								  const std::vector<float> &taps,
 								  float oversample_rate);
 
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.h
index d4357e3d89..3d028da56e 100644
--- a/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.h
+++ b/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.h
@@ -24,11 +24,12 @@
 #ifndef INCLUDED_GR_PFB_CLOCK_SYNC_CCF_H
 #define	INCLUDED_GR_PFB_CLOCK_SYNC_CCF_H
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 
 class gr_pfb_clock_sync_ccf;
 typedef boost::shared_ptr<gr_pfb_clock_sync_ccf> gr_pfb_clock_sync_ccf_sptr;
-gr_pfb_clock_sync_ccf_sptr gr_make_pfb_clock_sync_ccf (double sps, float gain,
+GR_CORE_API gr_pfb_clock_sync_ccf_sptr gr_make_pfb_clock_sync_ccf (double sps, float gain,
 						       const std::vector<float> &taps,
 						       unsigned int filter_size=32,
 						       float init_phase=0,
@@ -111,7 +112,7 @@ class gr_fir_ccf;
  *
  */
 
-class gr_pfb_clock_sync_ccf : public gr_block
+class GR_CORE_API gr_pfb_clock_sync_ccf : public gr_block
 {
  private:
   /*!
@@ -125,7 +126,7 @@ class gr_pfb_clock_sync_ccf : public gr_block
    * \param max_rate_deviation (float) Distance from 0 d_rate can get (default = 1.5).
    *
    */
-  friend gr_pfb_clock_sync_ccf_sptr gr_make_pfb_clock_sync_ccf (double sps, float gain,
+  friend GR_CORE_API gr_pfb_clock_sync_ccf_sptr gr_make_pfb_clock_sync_ccf (double sps, float gain,
 								const std::vector<float> &taps,
 								unsigned int filter_size,
 								float init_phase,
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_fff.h b/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_fff.h
index fa1279a7cb..d5984fe2df 100644
--- a/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_fff.h
+++ b/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_fff.h
@@ -24,11 +24,12 @@
 #ifndef INCLUDED_GR_PFB_CLOCK_SYNC_FFF_H
 #define	INCLUDED_GR_PFB_CLOCK_SYNC_FFF_H
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 
 class gr_pfb_clock_sync_fff;
 typedef boost::shared_ptr<gr_pfb_clock_sync_fff> gr_pfb_clock_sync_fff_sptr;
-gr_pfb_clock_sync_fff_sptr gr_make_pfb_clock_sync_fff (double sps, float gain,
+GR_CORE_API gr_pfb_clock_sync_fff_sptr gr_make_pfb_clock_sync_fff (double sps, float gain,
 						       const std::vector<float> &taps,
 						       unsigned int filter_size=32,
 						       float init_phase=0,
@@ -110,7 +111,7 @@ class gr_fir_fff;
  *
  */
 
-class gr_pfb_clock_sync_fff : public gr_block
+class GR_CORE_API gr_pfb_clock_sync_fff : public gr_block
 {
  private:
   /*!
@@ -124,7 +125,7 @@ class gr_pfb_clock_sync_fff : public gr_block
    * \param max_rate_deviation (float) Distance from 0 d_rate can get (default = 1.5).
    *
    */
-  friend gr_pfb_clock_sync_fff_sptr gr_make_pfb_clock_sync_fff (double sps, float gain,
+  friend GR_CORE_API gr_pfb_clock_sync_fff_sptr gr_make_pfb_clock_sync_fff (double sps, float gain,
 								const std::vector<float> &taps,
 								unsigned int filter_size,
 								float init_phase,
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.h
index 200adee3d3..d091fe4bde 100644
--- a/gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.h
+++ b/gnuradio-core/src/lib/filter/gr_pfb_decimator_ccf.h
@@ -24,11 +24,12 @@
 #ifndef INCLUDED_GR_PFB_DECIMATOR_CCF_H
 #define	INCLUDED_GR_PFB_DECIMATOR_CCF_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_pfb_decimator_ccf;
 typedef boost::shared_ptr<gr_pfb_decimator_ccf> gr_pfb_decimator_ccf_sptr;
-gr_pfb_decimator_ccf_sptr gr_make_pfb_decimator_ccf (unsigned int decim, 
+GR_CORE_API gr_pfb_decimator_ccf_sptr gr_make_pfb_decimator_ccf (unsigned int decim, 
 						     const std::vector<float> &taps,
 						     unsigned int channel=0);
 
@@ -92,7 +93,7 @@ class gri_fft_complex;
  *       Systems," Upper Saddle River, NJ: Prentice Hall, Inc. 2004.</EM></B>
  */
 
-class gr_pfb_decimator_ccf : public gr_sync_block
+class GR_CORE_API gr_pfb_decimator_ccf : public gr_sync_block
 {
  private:
   /*!
@@ -101,7 +102,7 @@ class gr_pfb_decimator_ccf : public gr_sync_block
    * \param taps    (vector/list of floats) The prototype filter to populate the filterbank.
    * \param channel (unsigned integer) Selects the channel to return [default=0].
    */
-  friend gr_pfb_decimator_ccf_sptr gr_make_pfb_decimator_ccf (unsigned int decim,
+  friend GR_CORE_API gr_pfb_decimator_ccf_sptr gr_make_pfb_decimator_ccf (unsigned int decim,
 							      const std::vector<float> &taps,
 							      unsigned int channel);
 
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.h
index d2efc591ab..5e3ba68155 100644
--- a/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.h
+++ b/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.h
@@ -24,11 +24,12 @@
 #ifndef INCLUDED_GR_PFB_INTERPOLATOR_CCF_H
 #define	INCLUDED_GR_PFB_INTERPOLATOR_CCF_H
 
+#include <gr_core_api.h>
 #include <gr_sync_interpolator.h>
 
 class gr_pfb_interpolator_ccf;
 typedef boost::shared_ptr<gr_pfb_interpolator_ccf> gr_pfb_interpolator_ccf_sptr;
-gr_pfb_interpolator_ccf_sptr gr_make_pfb_interpolator_ccf (unsigned int interp, 
+GR_CORE_API gr_pfb_interpolator_ccf_sptr gr_make_pfb_interpolator_ccf (unsigned int interp, 
 							   const std::vector<float> &taps);
 
 class gr_fir_ccf;
@@ -79,7 +80,7 @@ class gr_fir_ccf;
  *       Inc. 2004.</EM></B>
  */
 
-class gr_pfb_interpolator_ccf : public gr_sync_interpolator
+class GR_CORE_API gr_pfb_interpolator_ccf : public gr_sync_interpolator
 {
  private:
   /*!
@@ -88,7 +89,7 @@ class gr_pfb_interpolator_ccf : public gr_sync_interpolator
    * \param taps    (vector/list of floats) The prototype filter to populate the filterbank. The taps
    *                                        should be generated at the interpolated sampling rate.
    */
-  friend gr_pfb_interpolator_ccf_sptr gr_make_pfb_interpolator_ccf (unsigned int interp,
+  friend GR_CORE_API gr_pfb_interpolator_ccf_sptr gr_make_pfb_interpolator_ccf (unsigned int interp,
 								    const std::vector<float> &taps);
 
   std::vector<gr_fir_ccf*> d_filters;
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.h
index f5b1cbb946..0f3b7478c2 100644
--- a/gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.h
+++ b/gnuradio-core/src/lib/filter/gr_pfb_synthesis_filterbank_ccf.h
@@ -24,12 +24,13 @@
 #ifndef INCLUDED_GR_PFB_SYNTHESIS_FILTERBANK_CCF_H
 #define	INCLUDED_GR_PFB_SYNTHESIS_FILTERBANK_CCF_H
 
+#include <gr_core_api.h>
 #include <gr_sync_interpolator.h>
 #include <gri_fir_filter_with_buffer_ccf.h>
 
 class gr_pfb_synthesis_filterbank_ccf;
 typedef boost::shared_ptr<gr_pfb_synthesis_filterbank_ccf> gr_pfb_synthesis_filterbank_ccf_sptr;
-gr_pfb_synthesis_filterbank_ccf_sptr gr_make_pfb_synthesis_filterbank_ccf 
+GR_CORE_API gr_pfb_synthesis_filterbank_ccf_sptr gr_make_pfb_synthesis_filterbank_ccf 
     (unsigned int numchans, const std::vector<float> &taps);
 
 class gri_fft_complex;
@@ -44,7 +45,7 @@ class gri_fft_complex;
  * \ingroup filter_blk
  */
 
-class gr_pfb_synthesis_filterbank_ccf : public gr_sync_interpolator
+class GR_CORE_API gr_pfb_synthesis_filterbank_ccf : public gr_sync_interpolator
 {
  private:
   /*!
@@ -54,7 +55,7 @@ class gr_pfb_synthesis_filterbank_ccf : public gr_sync_interpolator
    * \param taps    (vector/list of floats) The prototype filter to
                     populate the filterbank.
    */
-  friend gr_pfb_synthesis_filterbank_ccf_sptr gr_make_pfb_synthesis_filterbank_ccf 
+  friend GR_CORE_API gr_pfb_synthesis_filterbank_ccf_sptr gr_make_pfb_synthesis_filterbank_ccf 
       (unsigned int numchans, const std::vector<float> &taps);
 
   bool			   d_updated;
diff --git a/gnuradio-core/src/lib/filter/gr_rational_resampler_base_XXX.h.t b/gnuradio-core/src/lib/filter/gr_rational_resampler_base_XXX.h.t
index 983b350fa1..8f50acc72c 100644
--- a/gnuradio-core/src/lib/filter/gr_rational_resampler_base_XXX.h.t
+++ b/gnuradio-core/src/lib/filter/gr_rational_resampler_base_XXX.h.t
@@ -29,11 +29,12 @@
 #ifndef @GUARD_NAME@
 #define	@GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@
+GR_CORE_API @SPTR_NAME@
 gr_make_@BASE_NAME@ (unsigned interpolation,
 		     unsigned decimation,
 		     const std::vector<@TAP_TYPE@> &taps);
@@ -44,7 +45,7 @@ class @FIR_TYPE@;
  * \brief Rational Resampling Polyphase FIR filter with @I_TYPE@ input, @O_TYPE@ output and @TAP_TYPE@ taps
  * \ingroup filter_blk
  */
-class @NAME@ : public gr_block
+class GR_CORE_API @NAME@ : public gr_block
 {
  private:
   unsigned 			d_history;
@@ -54,7 +55,7 @@ class @NAME@ : public gr_block
   bool				d_updated;
   std::vector<@FIR_TYPE@ *> d_firs;
 
-  friend @SPTR_NAME@ 
+  friend GR_CORE_API @SPTR_NAME@ 
   gr_make_@BASE_NAME@ (unsigned interpolation, unsigned decimation, const std::vector<@TAP_TYPE@> &taps);
 
 
diff --git a/gnuradio-core/src/lib/filter/gr_rotator.h b/gnuradio-core/src/lib/filter/gr_rotator.h
index cb8f21a403..23c7a2830e 100644
--- a/gnuradio-core/src/lib/filter/gr_rotator.h
+++ b/gnuradio-core/src/lib/filter/gr_rotator.h
@@ -23,9 +23,10 @@
 #ifndef _GR_ROTATOR_H_
 #define _GR_ROTATOR_H_
 
+#include <gr_core_api.h>
 #include <gr_complex.h>
 
-class gr_rotator {
+class GR_CORE_API gr_rotator {
   gr_complex	d_phase;
   gr_complex	d_phase_incr;
   unsigned int	d_counter;
diff --git a/gnuradio-core/src/lib/filter/gr_sincos.h b/gnuradio-core/src/lib/filter/gr_sincos.h
index a8e2679516..3d5c990834 100644
--- a/gnuradio-core/src/lib/filter/gr_sincos.h
+++ b/gnuradio-core/src/lib/filter/gr_sincos.h
@@ -23,14 +23,16 @@
 #ifndef INCLUDED_GR_SINCOS_H
 #define INCLUDED_GR_SINCOS_H
 
+#include <gr_core_api.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
   
 // compute sine and cosine at the same time
 
-void gr_sincos (double x, double *sin, double *cos);
-void gr_sincosf (float x, float *sin, float *cos);
+GR_CORE_API void gr_sincos (double x, double *sin, double *cos);
+GR_CORE_API void gr_sincosf (float x, float *sin, float *cos);
 
 #ifdef __cplusplus
 };
diff --git a/gnuradio-core/src/lib/filter/gr_single_pole_iir.h b/gnuradio-core/src/lib/filter/gr_single_pole_iir.h
index 8781065d42..fb52e29e98 100644
--- a/gnuradio-core/src/lib/filter/gr_single_pole_iir.h
+++ b/gnuradio-core/src/lib/filter/gr_single_pole_iir.h
@@ -22,6 +22,7 @@
 #ifndef _GR_SINGLE_POLE_IIR_H_
 #define _GR_SINGLE_POLE_IIR_H_
 
+#include <gr_core_api.h>
 #include <stdexcept>
 #include <gr_complex.h>
 /*!
diff --git a/gnuradio-core/src/lib/filter/gr_single_pole_iir_filter_cc.h b/gnuradio-core/src/lib/filter/gr_single_pole_iir_filter_cc.h
index 1f1073424d..3ce468db2c 100644
--- a/gnuradio-core/src/lib/filter/gr_single_pole_iir_filter_cc.h
+++ b/gnuradio-core/src/lib/filter/gr_single_pole_iir_filter_cc.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_SINGLE_POLE_IIR_FILTER_CC_H
 #define	INCLUDED_GR_SINGLE_POLE_IIR_FILTER_CC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_single_pole_iir.h>
 #include <gr_complex.h>
@@ -31,7 +32,7 @@
 class gr_single_pole_iir_filter_cc;
 typedef boost::shared_ptr<gr_single_pole_iir_filter_cc> gr_single_pole_iir_filter_cc_sptr;
 
-gr_single_pole_iir_filter_cc_sptr 
+GR_CORE_API gr_single_pole_iir_filter_cc_sptr 
 gr_make_single_pole_iir_filter_cc (double alpha, unsigned int vlen=1);
 
 /*!
@@ -53,10 +54,10 @@ gr_make_single_pole_iir_filter_cc (double alpha, unsigned int vlen=1);
  * Note that some texts define the system function with a + in the denominator.
  * If you're using that convention, you'll need to negate the feedback tap.
  */
-class gr_single_pole_iir_filter_cc : public gr_sync_block
+class GR_CORE_API gr_single_pole_iir_filter_cc : public gr_sync_block
 {
  private:
-  friend gr_single_pole_iir_filter_cc_sptr 
+  friend GR_CORE_API gr_single_pole_iir_filter_cc_sptr 
   gr_make_single_pole_iir_filter_cc (double alpha, unsigned int vlen);
 
   unsigned int			        		d_vlen;
diff --git a/gnuradio-core/src/lib/filter/gr_single_pole_iir_filter_ff.h b/gnuradio-core/src/lib/filter/gr_single_pole_iir_filter_ff.h
index f676e94bc0..d376587dfe 100644
--- a/gnuradio-core/src/lib/filter/gr_single_pole_iir_filter_ff.h
+++ b/gnuradio-core/src/lib/filter/gr_single_pole_iir_filter_ff.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_SINGLE_POLE_IIR_FILTER_FF_H
 #define	INCLUDED_GR_SINGLE_POLE_IIR_FILTER_FF_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_single_pole_iir.h>
 #include <stdexcept>
@@ -30,7 +31,7 @@
 class gr_single_pole_iir_filter_ff;
 typedef boost::shared_ptr<gr_single_pole_iir_filter_ff> gr_single_pole_iir_filter_ff_sptr;
 
-gr_single_pole_iir_filter_ff_sptr 
+GR_CORE_API gr_single_pole_iir_filter_ff_sptr 
 gr_make_single_pole_iir_filter_ff (double alpha, unsigned int vlen=1);
 
 /*!
@@ -52,10 +53,10 @@ gr_make_single_pole_iir_filter_ff (double alpha, unsigned int vlen=1);
  * Note that some texts define the system function with a + in the denominator.
  * If you're using that convention, you'll need to negate the feedback tap.
  */
-class gr_single_pole_iir_filter_ff : public gr_sync_block
+class GR_CORE_API gr_single_pole_iir_filter_ff : public gr_sync_block
 {
  private:
-  friend gr_single_pole_iir_filter_ff_sptr 
+  friend GR_CORE_API gr_single_pole_iir_filter_ff_sptr 
   gr_make_single_pole_iir_filter_ff (double alpha, unsigned int vlen);
 
   unsigned int			        		d_vlen;
diff --git a/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.h b/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.h
index 3cd9105c7e..4db7ba50fc 100644
--- a/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.h
+++ b/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GRI_FFT_FILTER_CCC_GENERIC_H
 #define INCLUDED_GRI_FFT_FILTER_CCC_GENERIC_H
 
+#include <gr_core_api.h>
 #include <gr_complex.h>
 #include <vector>
 
@@ -32,7 +33,7 @@ class gri_fft_complex;
  * \brief Fast FFT filter with gr_complex input, gr_complex output and gr_complex taps
  * \ingroup filter_blk
  */
-class gri_fft_filter_ccc_generic
+class GR_CORE_API gri_fft_filter_ccc_generic
 {
  private:
   int			   d_ntaps;
diff --git a/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_sse.h b/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_sse.h
index d1c54f01fb..6c96152c00 100644
--- a/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_sse.h
+++ b/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_sse.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GRI_FFT_FILTER_CCC_SSE_H
 #define INCLUDED_GRI_FFT_FILTER_CCC_SSE_H
 
+#include <gr_core_api.h>
 #include <gr_complex.h>
 #include <vector>
 
@@ -32,7 +33,7 @@ class gri_fft_complex;
  * \brief Fast FFT filter with gr_complex input, gr_complex output and gr_complex taps
  * \ingroup filter_blk
  */
-class gri_fft_filter_ccc_sse
+class GR_CORE_API gri_fft_filter_ccc_sse
 {
  private:
   int			   d_ntaps;
diff --git a/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.h b/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.h
index 6c31632d50..86658043a2 100644
--- a/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.h
+++ b/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GRI_FFT_FILTER_FFF_GENERIC_H
 #define INCLUDED_GRI_FFT_FILTER_FFF_GENERIC_H
 
+#include <gr_core_api.h>
 #include <gr_complex.h>
 #include <vector>
 
 class gri_fft_real_fwd;
 class gri_fft_real_rev;
 
-class gri_fft_filter_fff_generic
+class GR_CORE_API gri_fft_filter_fff_generic
 {
  private:
   int			   d_ntaps;
diff --git a/gnuradio-core/src/lib/filter/gri_fft_filter_fff_sse.h b/gnuradio-core/src/lib/filter/gri_fft_filter_fff_sse.h
index 8258bb8242..bd87358e27 100644
--- a/gnuradio-core/src/lib/filter/gri_fft_filter_fff_sse.h
+++ b/gnuradio-core/src/lib/filter/gri_fft_filter_fff_sse.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GRI_FFT_FILTER_FFF_SSE_H
 #define INCLUDED_GRI_FFT_FILTER_FFF_SSE_H
 
+#include <gr_core_api.h>
 #include <gr_complex.h>
 #include <vector>
 
 class gri_fft_real_fwd;
 class gri_fft_real_rev;
 
-class gri_fft_filter_fff_sse
+class GR_CORE_API gri_fft_filter_fff_sse
 {
  private:
   int			   d_ntaps;
diff --git a/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_XXX.h.t b/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_XXX.h.t
index 23d64b65dd..f209a8849f 100644
--- a/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_XXX.h.t
+++ b/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_XXX.h.t
@@ -29,6 +29,7 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <vector>
 #include <gr_types.h>
 #include <gr_reverse.h>
@@ -42,7 +43,7 @@
  * 
  */
 
-class @NAME@ {
+class GR_CORE_API @NAME@ {
 
 protected:
   std::vector<@TAP_TYPE@>	d_taps;		// reversed taps
diff --git a/gnuradio-core/src/lib/filter/gri_goertzel.h b/gnuradio-core/src/lib/filter/gri_goertzel.h
index e062f000e0..6fb64b9426 100644
--- a/gnuradio-core/src/lib/filter/gri_goertzel.h
+++ b/gnuradio-core/src/lib/filter/gri_goertzel.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GRI_GOERTZEL_H
 #define INCLUDED_GRI_GOERTZEL_H
 
+#include <gr_core_api.h>
 #include <gr_types.h>
 
 /*!
  * \brief Implements Goertzel single-bin DFT calculation
  * \ingroup misc
  */
-class gri_goertzel
+class GR_CORE_API gri_goertzel
 {
 public:
   gri_goertzel() {}
diff --git a/gnuradio-core/src/lib/filter/gri_iir.h b/gnuradio-core/src/lib/filter/gri_iir.h
index 5bc67df538..ddd8f9b815 100644
--- a/gnuradio-core/src/lib/filter/gri_iir.h
+++ b/gnuradio-core/src/lib/filter/gri_iir.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GRI_IIR_H
 #define INCLUDED_GRI_IIR_H
 
+#include <gr_core_api.h>
 #include <vector>
 #include <stdexcept>
 
diff --git a/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator.h b/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator.h
index 616520ad60..b2832b3f6e 100644
--- a/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator.h
+++ b/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator.h
@@ -22,6 +22,7 @@
 #ifndef _GRI_MMSE_FIR_INTERPOLATOR_H_
 #define _GRI_MMSE_FIR_INTERPOLATOR_H_
 
+#include <gr_core_api.h>
 #include <vector>
 
 class gr_fir_fff;
@@ -39,7 +40,7 @@ class gr_fir_fff;
  * method to 32nd's of a sample.
  */
 
-class gri_mmse_fir_interpolator {
+class GR_CORE_API gri_mmse_fir_interpolator {
 public:
   gri_mmse_fir_interpolator ();
   ~gri_mmse_fir_interpolator ();
diff --git a/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator_cc.h b/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator_cc.h
index daf8b19b83..2feef114bf 100644
--- a/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator_cc.h
+++ b/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator_cc.h
@@ -22,6 +22,7 @@
 #ifndef _GRI_MMSE_FIR_INTERPOLATOR_CC_H_
 #define _GRI_MMSE_FIR_INTERPOLATOR_CC_H_
 
+#include <gr_core_api.h>
 #include <gr_complex.h>
 #include <vector>
 
@@ -40,7 +41,7 @@ class gr_fir_ccf;
  * method to 32nd's of a sample.
  */
 
-class gri_mmse_fir_interpolator_cc {
+class GR_CORE_API gri_mmse_fir_interpolator_cc {
 public:
   gri_mmse_fir_interpolator_cc ();
   ~gri_mmse_fir_interpolator_cc ();
diff --git a/gnuradio-core/src/lib/filter/qa_filter.h b/gnuradio-core/src/lib/filter/qa_filter.h
index a51a88238d..a107820686 100644
--- a/gnuradio-core/src/lib/filter/qa_filter.h
+++ b/gnuradio-core/src/lib/filter/qa_filter.h
@@ -23,11 +23,12 @@
 #ifndef _QA_FILTER_H_
 #define _QA_FILTER_H_
 
+#include <gruel/attributes.h>
 #include <cppunit/TestSuite.h>
 
 //! collect all the tests for the gr directory
 
-class qa_filter {
+class __GR_ATTR_EXPORT qa_filter {
  public:
   //! return suite of tests for all of gr directory
   static CppUnit::TestSuite *suite ();
diff --git a/gnuradio-core/src/lib/general/complex_vec_test.h b/gnuradio-core/src/lib/general/complex_vec_test.h
index d13dedf632..be4de41fb0 100644
--- a/gnuradio-core/src/lib/general/complex_vec_test.h
+++ b/gnuradio-core/src/lib/general/complex_vec_test.h
@@ -1,27 +1,28 @@
+#include <gr_core_api.h>
 #include <vector>
 #include <complex>
 
-std::vector<std::complex<float> >
+GR_CORE_API std::vector<std::complex<float> >
 complex_vec_test0();
 
-std::vector<std::complex<float> >
+GR_CORE_API std::vector<std::complex<float> >
 complex_vec_test1(const std::vector<std::complex<float> > &input);
 
-std::complex<float>
+GR_CORE_API std::complex<float>
 complex_scalar_test0();
 
-std::complex<float>
+GR_CORE_API std::complex<float>
 complex_scalar_test1(std::complex<float> input);
 
-std::vector<int>
+GR_CORE_API std::vector<int>
 int_vec_test0();
 
-std::vector<int>
+GR_CORE_API std::vector<int>
 int_vec_test1(const std::vector<int> &input);
 
-std::vector<float>
+GR_CORE_API std::vector<float>
 float_vec_test0();
 
-std::vector<float>
+GR_CORE_API std::vector<float>
 float_vec_test1(const std::vector<float> &input);
 
diff --git a/gnuradio-core/src/lib/general/gr_additive_scrambler_bb.h b/gnuradio-core/src/lib/general/gr_additive_scrambler_bb.h
index 6c94930501..4c7c8f87ea 100644
--- a/gnuradio-core/src/lib/general/gr_additive_scrambler_bb.h
+++ b/gnuradio-core/src/lib/general/gr_additive_scrambler_bb.h
@@ -22,13 +22,14 @@
 #ifndef INCLUDED_GR_ADDITIVE_SCRAMBLER_BB_H
 #define INCLUDED_GR_ADDITIVE_SCRAMBLER_BB_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include "gri_lfsr.h"
 
 class gr_additive_scrambler_bb;
 typedef boost::shared_ptr<gr_additive_scrambler_bb> gr_additive_scrambler_bb_sptr;
 
-gr_additive_scrambler_bb_sptr gr_make_additive_scrambler_bb(int mask, int seed, int len, int count=0);
+GR_CORE_API gr_additive_scrambler_bb_sptr gr_make_additive_scrambler_bb(int mask, int seed, int len, int count=0);
 
 /*!
  * Scramble an input stream using an LFSR.  This block works on the LSB only
@@ -48,9 +49,9 @@ gr_additive_scrambler_bb_sptr gr_make_additive_scrambler_bb(int mask, int seed,
  * \ingroup coding_blk
  */
 
-class gr_additive_scrambler_bb : public gr_sync_block
+class GR_CORE_API gr_additive_scrambler_bb : public gr_sync_block
 {
-  friend gr_additive_scrambler_bb_sptr gr_make_additive_scrambler_bb(int mask, int seed, int len, int count);
+  friend GR_CORE_API gr_additive_scrambler_bb_sptr gr_make_additive_scrambler_bb(int mask, int seed, int len, int count);
 
   gri_lfsr d_lfsr;
   int      d_count;
diff --git a/gnuradio-core/src/lib/general/gr_agc2_cc.h b/gnuradio-core/src/lib/general/gr_agc2_cc.h
index 0eb20afb93..6127c3aa79 100644
--- a/gnuradio-core/src/lib/general/gr_agc2_cc.h
+++ b/gnuradio-core/src/lib/general/gr_agc2_cc.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_AGC2_CC_H
 #define INCLUDED_GR_AGC2_CC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gri_agc2_cc.h>
 
 class gr_agc2_cc;
 typedef boost::shared_ptr<gr_agc2_cc> gr_agc2_cc_sptr;
 
-gr_agc2_cc_sptr
+GR_CORE_API gr_agc2_cc_sptr
 gr_make_agc2_cc (float attack_rate = 1e-1, float decay_rate = 1e-2, float reference = 1.0, 
 		 float gain = 1.0, float max_gain = 0.0);
 /*!
@@ -39,9 +40,9 @@ gr_make_agc2_cc (float attack_rate = 1e-1, float decay_rate = 1e-2, float refere
  * For Power the absolute value of the complex number is used.
  */
 
-class gr_agc2_cc : public gr_sync_block, public gri_agc2_cc
+class GR_CORE_API gr_agc2_cc : public gr_sync_block, public gri_agc2_cc
 {
-  friend gr_agc2_cc_sptr gr_make_agc2_cc (float attack_rate, float decay_rate, float reference, 
+  friend GR_CORE_API gr_agc2_cc_sptr gr_make_agc2_cc (float attack_rate, float decay_rate, float reference, 
 					  float gain, float max_gain);
   gr_agc2_cc (float attack_rate, float decay_rate, float reference, 
 	      float gain, float max_gain);
diff --git a/gnuradio-core/src/lib/general/gr_agc2_ff.h b/gnuradio-core/src/lib/general/gr_agc2_ff.h
index ef470765fa..269d940d4d 100644
--- a/gnuradio-core/src/lib/general/gr_agc2_ff.h
+++ b/gnuradio-core/src/lib/general/gr_agc2_ff.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_AGC2_FF_H
 #define INCLUDED_GR_AGC2_FF_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gri_agc2_ff.h>
 class gr_agc2_ff;
 typedef boost::shared_ptr<gr_agc2_ff> gr_agc2_ff_sptr;
 
-gr_agc2_ff_sptr
+GR_CORE_API gr_agc2_ff_sptr
 gr_make_agc2_ff (float attack_rate = 1e-1, float decay_rate = 1e-2, float reference = 1.0, 
 		 float gain = 1.0, float max_gain = 0.0);
 /*!
@@ -38,9 +39,9 @@ gr_make_agc2_ff (float attack_rate = 1e-1, float decay_rate = 1e-2, float refere
  * Power is approximated by absolute value
  */
 
-class gr_agc2_ff : public gr_sync_block, public gri_agc2_ff
+class GR_CORE_API gr_agc2_ff : public gr_sync_block, public gri_agc2_ff
 {
-  friend gr_agc2_ff_sptr gr_make_agc2_ff (float attack_rate, float decay_rate,
+  friend GR_CORE_API gr_agc2_ff_sptr gr_make_agc2_ff (float attack_rate, float decay_rate,
 					  float reference, float gain, float max_gain);
   gr_agc2_ff (float attack_rate, float decay_rate, float reference, float gain, float max_gain);
 
diff --git a/gnuradio-core/src/lib/general/gr_agc_cc.h b/gnuradio-core/src/lib/general/gr_agc_cc.h
index 43a5de6c70..f348fff919 100644
--- a/gnuradio-core/src/lib/general/gr_agc_cc.h
+++ b/gnuradio-core/src/lib/general/gr_agc_cc.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_AGC_CC_H
 #define INCLUDED_GR_AGC_CC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gri_agc_cc.h>
 class gr_agc_cc;
 typedef boost::shared_ptr<gr_agc_cc> gr_agc_cc_sptr;
 
-gr_agc_cc_sptr
+GR_CORE_API gr_agc_cc_sptr
 gr_make_agc_cc (float rate = 1e-4, float reference = 1.0, 
 		float gain = 1.0, float max_gain = 0.0);
 /*!
@@ -38,9 +39,9 @@ gr_make_agc_cc (float rate = 1e-4, float reference = 1.0,
  * For Power the absolute value of the complex number is used.
  */
 
-class gr_agc_cc : public gr_sync_block, public gri_agc_cc
+class GR_CORE_API gr_agc_cc : public gr_sync_block, public gri_agc_cc
 {
-  friend gr_agc_cc_sptr gr_make_agc_cc (float rate, float reference, 
+  friend GR_CORE_API gr_agc_cc_sptr gr_make_agc_cc (float rate, float reference, 
 					float gain, float max_gain);
   gr_agc_cc (float rate, float reference, 
 	     float gain, float max_gain);
diff --git a/gnuradio-core/src/lib/general/gr_agc_ff.h b/gnuradio-core/src/lib/general/gr_agc_ff.h
index 7cb167fca2..94db9eef52 100644
--- a/gnuradio-core/src/lib/general/gr_agc_ff.h
+++ b/gnuradio-core/src/lib/general/gr_agc_ff.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_AGC_FF_H
 #define INCLUDED_GR_AGC_FF_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gri_agc_ff.h>
 class gr_agc_ff;
 typedef boost::shared_ptr<gr_agc_ff> gr_agc_ff_sptr;
 
-gr_agc_ff_sptr
+GR_CORE_API gr_agc_ff_sptr
 gr_make_agc_ff (float rate = 1e-4, float reference = 1.0, 
 		float gain = 1.0, float max_gain = 0.0);
 
@@ -39,9 +40,9 @@ gr_make_agc_ff (float rate = 1e-4, float reference = 1.0,
  * Power is approximated by absolute value
  */
 
-class gr_agc_ff : public gr_sync_block, public gri_agc_ff
+class GR_CORE_API gr_agc_ff : public gr_sync_block, public gri_agc_ff
 {
-  friend gr_agc_ff_sptr gr_make_agc_ff (float rate, float reference, 
+  friend GR_CORE_API gr_agc_ff_sptr gr_make_agc_ff (float rate, float reference, 
 					float gain, float max_gain);
   gr_agc_ff (float rate, float reference, float gain, float max_gain);
 
diff --git a/gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.h b/gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.h
index 5038e168be..61f70ee967 100644
--- a/gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.h
+++ b/gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_ALIGN_ON_SAMPLE_NUMBERS_SS_H
 #define INCLUDED_GR_ALIGN_ON_SAMPLE_NUMBERS_SS_H
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 
 /*!
@@ -45,19 +46,19 @@
 class gr_align_on_samplenumbers_ss;
 typedef boost::shared_ptr<gr_align_on_samplenumbers_ss> gr_align_on_samplenumbers_ss_sptr;
 
-gr_align_on_samplenumbers_ss_sptr gr_make_align_on_samplenumbers_ss (int nchan=2, int align_interval=128);
+GR_CORE_API gr_align_on_samplenumbers_ss_sptr gr_make_align_on_samplenumbers_ss (int nchan=2, int align_interval=128);
 
 
 
 
-class gr_align_on_samplenumbers_ss : public gr_block
+class GR_CORE_API gr_align_on_samplenumbers_ss : public gr_block
 {
   int  d_align_interval;
   int  d_sample_counter;
   int  d_nchan;
   bool d_in_presync;
   unsigned int d_ninputs;
-  class align_state {
+  class GR_CORE_API align_state {
       public:
         unsigned int ucounter_end;
         unsigned int ucounter_begin;
@@ -72,7 +73,7 @@ class gr_align_on_samplenumbers_ss : public gr_block
       };
   std::vector<align_state>   d_state;
     
-  friend gr_align_on_samplenumbers_ss_sptr gr_make_align_on_samplenumbers_ss (int nchan,int align_interval);
+  friend GR_CORE_API gr_align_on_samplenumbers_ss_sptr gr_make_align_on_samplenumbers_ss (int nchan,int align_interval);
   gr_align_on_samplenumbers_ss (int nchan,int align_interval);
 
  public:
diff --git a/gnuradio-core/src/lib/general/gr_annotator_1to1.h b/gnuradio-core/src/lib/general/gr_annotator_1to1.h
index 4abc5b0516..d866407fe3 100644
--- a/gnuradio-core/src/lib/general/gr_annotator_1to1.h
+++ b/gnuradio-core/src/lib/general/gr_annotator_1to1.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_ANNOTATOR_1TO1_H
 #define	INCLUDED_GR_ANNOTATOR_1TO1_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_annotator_1to1;
 typedef boost::shared_ptr<gr_annotator_1to1> gr_annotator_1to1_sptr;
 
 // public constructor
-gr_annotator_1to1_sptr 
+GR_CORE_API gr_annotator_1to1_sptr 
 gr_make_annotator_1to1 (int when, size_t sizeof_stream_item);
 
 /*!
@@ -45,7 +46,7 @@ gr_make_annotator_1to1 (int when, size_t sizeof_stream_item);
  *
  * This block is only meant for testing and showing how to use the tags.
  */
-class gr_annotator_1to1 : public gr_sync_block
+class GR_CORE_API gr_annotator_1to1 : public gr_sync_block
 {
  public:
   ~gr_annotator_1to1 ();
@@ -67,7 +68,7 @@ protected:
   uint64_t d_tag_counter;
   std::vector<pmt::pmt_t> d_stored_tags;
 
-  friend gr_annotator_1to1_sptr
+  friend GR_CORE_API gr_annotator_1to1_sptr
   gr_make_annotator_1to1 (int when, size_t sizeof_stream_item);
 };
 
diff --git a/gnuradio-core/src/lib/general/gr_annotator_alltoall.h b/gnuradio-core/src/lib/general/gr_annotator_alltoall.h
index e1e51ebf37..259b2e54cb 100644
--- a/gnuradio-core/src/lib/general/gr_annotator_alltoall.h
+++ b/gnuradio-core/src/lib/general/gr_annotator_alltoall.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_ANNOTATOR_ALLTOALL_H
 #define	INCLUDED_GR_ANNOTATOR_ALLTOALL_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_annotator_alltoall;
 typedef boost::shared_ptr<gr_annotator_alltoall> gr_annotator_alltoall_sptr;
 
 // public constructor
-gr_annotator_alltoall_sptr 
+GR_CORE_API gr_annotator_alltoall_sptr 
 gr_make_annotator_alltoall (int when, size_t sizeof_stream_item);
 
 /*!
@@ -45,7 +46,7 @@ gr_make_annotator_alltoall (int when, size_t sizeof_stream_item);
  *
  * This block is only meant for testing and showing how to use the tags.
  */
-class gr_annotator_alltoall : public gr_sync_block
+class GR_CORE_API gr_annotator_alltoall : public gr_sync_block
 {
  public:
   ~gr_annotator_alltoall ();
@@ -68,7 +69,7 @@ protected:
   uint64_t d_tag_counter;
   std::vector<pmt::pmt_t> d_stored_tags;
 
-  friend gr_annotator_alltoall_sptr
+  friend GR_CORE_API gr_annotator_alltoall_sptr
   gr_make_annotator_alltoall (int when, size_t sizeof_stream_item);
 };
 
diff --git a/gnuradio-core/src/lib/general/gr_bin_statistics_f.h b/gnuradio-core/src/lib/general/gr_bin_statistics_f.h
index d8c4c2faea..f7eea7d5f2 100644
--- a/gnuradio-core/src/lib/general/gr_bin_statistics_f.h
+++ b/gnuradio-core/src/lib/general/gr_bin_statistics_f.h
@@ -24,6 +24,7 @@
 #define INCLUDED_GR_BIN_STATISTICS_F_H
 
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_feval.h>
 #include <gr_message.h>
@@ -33,7 +34,7 @@ class gr_bin_statistics_f;
 typedef boost::shared_ptr<gr_bin_statistics_f> gr_bin_statistics_f_sptr;
 
 
-gr_bin_statistics_f_sptr
+GR_CORE_API gr_bin_statistics_f_sptr
 gr_make_bin_statistics_f(unsigned int vlen,	// vector length
 			 gr_msg_queue_sptr msgq,
 			 gr_feval_dd *tune,	// callback
@@ -44,9 +45,9 @@ gr_make_bin_statistics_f(unsigned int vlen,	// vector length
  * \brief control scanning and record frequency domain statistics
  * \ingroup sink_blk
  */
-class gr_bin_statistics_f : public gr_sync_block
+class GR_CORE_API gr_bin_statistics_f : public gr_sync_block
 {
-  friend gr_bin_statistics_f_sptr
+  friend GR_CORE_API gr_bin_statistics_f_sptr
   gr_make_bin_statistics_f(unsigned int vlen,	   // vector length
 			   gr_msg_queue_sptr msgq,
 			   gr_feval_dd *tune,      // callback
diff --git a/gnuradio-core/src/lib/general/gr_binary_slicer_fb.h b/gnuradio-core/src/lib/general/gr_binary_slicer_fb.h
index 2aa4a0828f..45d8e6213e 100644
--- a/gnuradio-core/src/lib/general/gr_binary_slicer_fb.h
+++ b/gnuradio-core/src/lib/general/gr_binary_slicer_fb.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_BINARY_SLICER_FB_H
 #define INCLUDED_GR_BINARY_SLICER_FB_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_binary_slicer_fb;
 typedef boost::shared_ptr<gr_binary_slicer_fb> gr_binary_slicer_fb_sptr;
 
-gr_binary_slicer_fb_sptr gr_make_binary_slicer_fb ();
+GR_CORE_API gr_binary_slicer_fb_sptr gr_make_binary_slicer_fb ();
 
 /*!
  * \brief slice float binary symbol outputting 1 bit output
@@ -37,9 +38,9 @@ gr_binary_slicer_fb_sptr gr_make_binary_slicer_fb ();
  * x <  0 --> 0
  * x >= 0 --> 1
  */
-class gr_binary_slicer_fb : public gr_sync_block
+class GR_CORE_API gr_binary_slicer_fb : public gr_sync_block
 {
-  friend gr_binary_slicer_fb_sptr gr_make_binary_slicer_fb ();
+  friend GR_CORE_API gr_binary_slicer_fb_sptr gr_make_binary_slicer_fb ();
   gr_binary_slicer_fb ();
 
  public:
diff --git a/gnuradio-core/src/lib/general/gr_burst_tagger.h b/gnuradio-core/src/lib/general/gr_burst_tagger.h
index 8f814bea09..7547ba9cc5 100644
--- a/gnuradio-core/src/lib/general/gr_burst_tagger.h
+++ b/gnuradio-core/src/lib/general/gr_burst_tagger.h
@@ -23,26 +23,27 @@
 #ifndef INCLUDED_GR_BURST_TAGGER_H
 #define INCLUDED_GR_BURST_TAGGER_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_burst_tagger;
 typedef boost::shared_ptr<gr_burst_tagger> gr_burst_tagger_sptr;
 
-gr_burst_tagger_sptr gr_make_burst_tagger(size_t itemsize);
+GR_CORE_API gr_burst_tagger_sptr gr_make_burst_tagger(size_t itemsize);
 
 /*!
  * \brief output[i] = input[i]
  * \ingroup misc_blk
  *
  */
-class gr_burst_tagger : public gr_sync_block
+class GR_CORE_API gr_burst_tagger : public gr_sync_block
 {
   size_t		d_itemsize;
   bool                  d_state;
   pmt::pmt_t            d_key;
   pmt::pmt_t            d_id;
 
-  friend gr_burst_tagger_sptr gr_make_burst_tagger(size_t itemsize);
+  friend GR_CORE_API gr_burst_tagger_sptr gr_make_burst_tagger(size_t itemsize);
   gr_burst_tagger(size_t itemsize);
 
  public:
diff --git a/gnuradio-core/src/lib/general/gr_bytes_to_syms.h b/gnuradio-core/src/lib/general/gr_bytes_to_syms.h
index 1531de02a9..33b98d4fd4 100644
--- a/gnuradio-core/src/lib/general/gr_bytes_to_syms.h
+++ b/gnuradio-core/src/lib/general/gr_bytes_to_syms.h
@@ -22,12 +22,13 @@
 #ifndef INCLUDED_GR_BYTES_TO_SYMS_H
 #define INCLUDED_GR_BYTES_TO_SYMS_H
 
+#include <gr_core_api.h>
 #include <gr_sync_interpolator.h>
 
 class gr_bytes_to_syms;
 typedef boost::shared_ptr<gr_bytes_to_syms> gr_bytes_to_syms_sptr;
 
-gr_bytes_to_syms_sptr gr_make_bytes_to_syms ();
+GR_CORE_API gr_bytes_to_syms_sptr gr_make_bytes_to_syms ();
 
 /*!
  * \brief Convert stream of bytes to stream of +/- 1 symbols
@@ -45,9 +46,9 @@ gr_bytes_to_syms_sptr gr_make_bytes_to_syms ();
  * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb,
  * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc.
  */
-class gr_bytes_to_syms : public gr_sync_interpolator
+class GR_CORE_API gr_bytes_to_syms : public gr_sync_interpolator
 {
-  friend gr_bytes_to_syms_sptr gr_make_bytes_to_syms ();
+  friend GR_CORE_API gr_bytes_to_syms_sptr gr_make_bytes_to_syms ();
 
   gr_bytes_to_syms ();
 
diff --git a/gnuradio-core/src/lib/general/gr_char_to_float.h b/gnuradio-core/src/lib/general/gr_char_to_float.h
index 482e479d6f..b20d2066f3 100644
--- a/gnuradio-core/src/lib/general/gr_char_to_float.h
+++ b/gnuradio-core/src/lib/general/gr_char_to_float.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_CHAR_TO_FLOAT_H
 #define INCLUDED_GR_CHAR_TO_FLOAT_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_char_to_float;
 typedef boost::shared_ptr<gr_char_to_float> gr_char_to_float_sptr;
 
-gr_char_to_float_sptr
+GR_CORE_API gr_char_to_float_sptr
 gr_make_char_to_float ();
 
 /*!
@@ -36,9 +37,9 @@ gr_make_char_to_float ();
  * \ingroup converter_blk
  */
 
-class gr_char_to_float : public gr_sync_block
+class GR_CORE_API gr_char_to_float : public gr_sync_block
 {
-  friend gr_char_to_float_sptr gr_make_char_to_float ();
+  friend GR_CORE_API gr_char_to_float_sptr gr_make_char_to_float ();
   gr_char_to_float ();
 
  public:
diff --git a/gnuradio-core/src/lib/general/gr_check_counting_s.h b/gnuradio-core/src/lib/general/gr_check_counting_s.h
index da35ab8e27..cd4dcb24e4 100644
--- a/gnuradio-core/src/lib/general/gr_check_counting_s.h
+++ b/gnuradio-core/src/lib/general/gr_check_counting_s.h
@@ -22,12 +22,13 @@
 #ifndef INCLUDED_GR_CHECK_COUNTING_S_H
 #define INCLUDED_GR_CHECK_COUNTING_S_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_check_counting_s;
 typedef boost::shared_ptr<gr_check_counting_s> gr_check_counting_s_sptr;
 
-gr_check_counting_s_sptr gr_make_check_counting_s (bool do_32bit=false);
+GR_CORE_API gr_check_counting_s_sptr gr_make_check_counting_s (bool do_32bit=false);
 
 /*!
  * \brief sink that checks if its input stream consists of a counting sequence.
@@ -36,9 +37,9 @@ gr_check_counting_s_sptr gr_make_check_counting_s (bool do_32bit=false);
  *
  * This sink is typically used to test the USRP "Counting Mode" or "Counting mode 32 bit".
  */
-class gr_check_counting_s : public gr_sync_block
+class GR_CORE_API gr_check_counting_s : public gr_sync_block
 {
-  friend gr_check_counting_s_sptr gr_make_check_counting_s (bool do_32bit);
+  friend GR_CORE_API gr_check_counting_s_sptr gr_make_check_counting_s (bool do_32bit);
 
   enum state {
     SEARCHING,    // searching for synchronization
diff --git a/gnuradio-core/src/lib/general/gr_check_lfsr_32k_s.h b/gnuradio-core/src/lib/general/gr_check_lfsr_32k_s.h
index e2bff46d23..939675db8d 100644
--- a/gnuradio-core/src/lib/general/gr_check_lfsr_32k_s.h
+++ b/gnuradio-core/src/lib/general/gr_check_lfsr_32k_s.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_CHECK_LFSR_32K_S_H
 #define INCLUDED_GR_CHECK_LFSR_32K_S_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gri_lfsr_32k.h>
 
@@ -29,7 +30,7 @@
 class gr_check_lfsr_32k_s;
 typedef boost::shared_ptr<gr_check_lfsr_32k_s> gr_check_lfsr_32k_s_sptr;
 
-gr_check_lfsr_32k_s_sptr gr_make_check_lfsr_32k_s ();
+GR_CORE_API gr_check_lfsr_32k_s_sptr gr_make_check_lfsr_32k_s ();
 
 /*!
  * \brief sink that checks if its input stream consists of a lfsr_32k sequence.
@@ -38,9 +39,9 @@ gr_check_lfsr_32k_s_sptr gr_make_check_lfsr_32k_s ();
  * This sink is typically used along with gr_lfsr_32k_source_s to test
  * the USRP using its digital loopback mode.
  */
-class gr_check_lfsr_32k_s : public gr_sync_block
+class GR_CORE_API gr_check_lfsr_32k_s : public gr_sync_block
 {
-  friend gr_check_lfsr_32k_s_sptr gr_make_check_lfsr_32k_s ();
+  friend GR_CORE_API gr_check_lfsr_32k_s_sptr gr_make_check_lfsr_32k_s ();
 
   enum state {
     SEARCHING,		// searching for synchronization
diff --git a/gnuradio-core/src/lib/general/gr_circular_file.h b/gnuradio-core/src/lib/general/gr_circular_file.h
index 70f4b4b116..3d3f33a8dc 100644
--- a/gnuradio-core/src/lib/general/gr_circular_file.h
+++ b/gnuradio-core/src/lib/general/gr_circular_file.h
@@ -23,6 +23,8 @@
 #ifndef _GR_CIRCULAR_FILE_H_
 #define _GR_CIRCULAR_FILE_H_
 
+#include <gr_core_api.h>
+
 /*
  * writes input data into a circular buffer on disk.
  *
@@ -35,7 +37,7 @@
  *		      current start of data
  *
  */
-class gr_circular_file {
+class GR_CORE_API gr_circular_file {
   int		 d_fd;
   int		*d_header;
   unsigned char	*d_buffer;
@@ -55,4 +57,4 @@ public:
   void reset_read_pointer ();
 };
 
-#endif /* _GR_CIRCULAR_FILE_H_ */
+#endif /* _GR_CIRCULAR_FILE_H_ */
\ No newline at end of file
diff --git a/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.h b/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.h
index 04227a1454..292b066dc3 100644
--- a/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.h
+++ b/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_CLOCK_RECOVERY_MM_CC_H
 #define	INCLUDED_GR_CLOCK_RECOVERY_MM_CC_H
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 #include <gr_complex.h>
 #include <gr_math.h>
@@ -33,7 +34,7 @@ class gr_clock_recovery_mm_cc;
 typedef boost::shared_ptr<gr_clock_recovery_mm_cc> gr_clock_recovery_mm_cc_sptr;
 
 // public constructor
-gr_clock_recovery_mm_cc_sptr 
+GR_CORE_API gr_clock_recovery_mm_cc_sptr 
 gr_make_clock_recovery_mm_cc (float omega, float gain_omega, float mu, float gain_mu,
 			      float omega_relative_limit=0.001);
 
@@ -48,7 +49,7 @@ gr_make_clock_recovery_mm_cc (float omega, float gain_omega, float mu, float gai
  *    G. R. Danesfahani, T.G. Jeans, "Optimisation of modified Mueller and Muller 
  *    algorithm,"  Electronics Letters, Vol. 31, no. 13,  22 June 1995, pp. 1032 - 1033.
  */
-class gr_clock_recovery_mm_cc : public gr_block
+class GR_CORE_API gr_clock_recovery_mm_cc : public gr_block
 {
  public:
   ~gr_clock_recovery_mm_cc ();
@@ -101,7 +102,7 @@ protected:
   gr_complex slicer_0deg (gr_complex sample);
   gr_complex slicer_45deg (gr_complex sample);
 
-  friend gr_clock_recovery_mm_cc_sptr
+  friend GR_CORE_API gr_clock_recovery_mm_cc_sptr
   gr_make_clock_recovery_mm_cc (float omega, float gain_omega, float mu, float gain_mu, 
 				float omega_relative_limit);
 };
diff --git a/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.h b/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.h
index d2ec6d3e6d..2b33463380 100644
--- a/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.h
+++ b/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_CLOCK_RECOVERY_MM_FF_H
 #define	INCLUDED_GR_CLOCK_RECOVERY_MM_FF_H
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 #include <gr_math.h>
 #include <stdio.h>
@@ -33,7 +34,7 @@ class gr_clock_recovery_mm_ff;
 typedef boost::shared_ptr<gr_clock_recovery_mm_ff> gr_clock_recovery_mm_ff_sptr;
 
 // public constructor
-gr_clock_recovery_mm_ff_sptr 
+GR_CORE_API gr_clock_recovery_mm_ff_sptr 
 gr_make_clock_recovery_mm_ff (float omega, float gain_omega, float mu, float gain_mu,
 			      float omega_relative_limit=0.001);
 
@@ -47,7 +48,7 @@ gr_make_clock_recovery_mm_ff (float omega, float gain_omega, float mu, float gai
  * Estimation and Signal Processing" by Heinrich Meyr, Marc Moeneclaey, & Stefan Fechtel.
  * ISBN 0-471-50275-8.
  */
-class gr_clock_recovery_mm_ff : public gr_block
+class GR_CORE_API gr_clock_recovery_mm_ff : public gr_block
 {
  public:
   ~gr_clock_recovery_mm_ff ();
@@ -88,7 +89,7 @@ protected:
   FILE				*d_logfile;
   float				d_omega_relative_limit;	// used to compute min and max omega
 
-  friend gr_clock_recovery_mm_ff_sptr
+  friend GR_CORE_API gr_clock_recovery_mm_ff_sptr
   gr_make_clock_recovery_mm_ff (float omega, float gain_omega, float mu, float gain_mu,
 				float omega_relative_limit);
 };
diff --git a/gnuradio-core/src/lib/general/gr_complex_to_interleaved_short.h b/gnuradio-core/src/lib/general/gr_complex_to_interleaved_short.h
index 0a91eddd62..a3e2d38adf 100644
--- a/gnuradio-core/src/lib/general/gr_complex_to_interleaved_short.h
+++ b/gnuradio-core/src/lib/general/gr_complex_to_interleaved_short.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_COMPLEX_TO_INTERLEAVED_SHORT_H
 #define INCLUDED_GR_COMPLEX_TO_INTERLEAVED_SHORT_H
 
+#include <gr_core_api.h>
 #include <gr_sync_interpolator.h>
 
 class gr_complex_to_interleaved_short;
 typedef boost::shared_ptr<gr_complex_to_interleaved_short>
   gr_complex_to_interleaved_short_sptr;
 
-gr_complex_to_interleaved_short_sptr
+GR_CORE_API gr_complex_to_interleaved_short_sptr
 gr_make_complex_to_interleaved_short ();
 
 /*!
@@ -37,9 +38,9 @@ gr_make_complex_to_interleaved_short ();
  * \ingroup converter_blk
  */
 
-class gr_complex_to_interleaved_short : public gr_sync_interpolator
+class GR_CORE_API gr_complex_to_interleaved_short : public gr_sync_interpolator
 {
-  friend gr_complex_to_interleaved_short_sptr gr_make_complex_to_interleaved_short ();
+  friend GR_CORE_API gr_complex_to_interleaved_short_sptr gr_make_complex_to_interleaved_short ();
   gr_complex_to_interleaved_short ();
 
  public:
diff --git a/gnuradio-core/src/lib/general/gr_complex_to_xxx.h b/gnuradio-core/src/lib/general/gr_complex_to_xxx.h
index 1851c67d97..1664032591 100644
--- a/gnuradio-core/src/lib/general/gr_complex_to_xxx.h
+++ b/gnuradio-core/src/lib/general/gr_complex_to_xxx.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_COMPLEX_TO_XXX_H
 #define INCLUDED_GR_COMPLEX_TO_XXX_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_complex.h>
 
@@ -40,21 +41,21 @@ typedef boost::shared_ptr<gr_complex_to_mag> gr_complex_to_mag_sptr;
 typedef boost::shared_ptr<gr_complex_to_mag_squared> gr_complex_to_mag_squared_sptr;
 typedef boost::shared_ptr<gr_complex_to_arg> gr_complex_to_arg_sptr;
 
-gr_complex_to_float_sptr gr_make_complex_to_float (unsigned int vlen=1);
-gr_complex_to_real_sptr gr_make_complex_to_real (unsigned int vlen=1);
-gr_complex_to_imag_sptr gr_make_complex_to_imag (unsigned int vlen=1);
-gr_complex_to_mag_sptr gr_make_complex_to_mag (unsigned int vlen=1);
-gr_complex_to_mag_squared_sptr gr_make_complex_to_mag_squared (unsigned int vlen=1);
-gr_complex_to_arg_sptr gr_make_complex_to_arg (unsigned int vlen=1);
+GR_CORE_API gr_complex_to_float_sptr gr_make_complex_to_float (unsigned int vlen=1);
+GR_CORE_API gr_complex_to_real_sptr gr_make_complex_to_real (unsigned int vlen=1);
+GR_CORE_API gr_complex_to_imag_sptr gr_make_complex_to_imag (unsigned int vlen=1);
+GR_CORE_API gr_complex_to_mag_sptr gr_make_complex_to_mag (unsigned int vlen=1);
+GR_CORE_API gr_complex_to_mag_squared_sptr gr_make_complex_to_mag_squared (unsigned int vlen=1);
+GR_CORE_API gr_complex_to_arg_sptr gr_make_complex_to_arg (unsigned int vlen=1);
 
 /*!
  * \brief convert a stream of gr_complex to 1 or 2 streams of float
  * \ingroup converter_blk
  * \param vlen	vector len (default 1)
  */
-class gr_complex_to_float : public gr_sync_block
+class GR_CORE_API gr_complex_to_float : public gr_sync_block
 {
-  friend gr_complex_to_float_sptr gr_make_complex_to_float (unsigned int vlen);
+  friend GR_CORE_API gr_complex_to_float_sptr gr_make_complex_to_float (unsigned int vlen);
   gr_complex_to_float (unsigned int vlen);
 
   unsigned int	d_vlen;
@@ -70,9 +71,9 @@ class gr_complex_to_float : public gr_sync_block
  * \ingroup converter_blk
  * \param vlen	vector len (default 1)
  */
-class gr_complex_to_real : public gr_sync_block
+class GR_CORE_API gr_complex_to_real : public gr_sync_block
 {
-  friend gr_complex_to_real_sptr gr_make_complex_to_real (unsigned int vlen);
+  friend GR_CORE_API gr_complex_to_real_sptr gr_make_complex_to_real (unsigned int vlen);
   gr_complex_to_real (unsigned int vlen);
 
   unsigned int	d_vlen;
@@ -88,9 +89,9 @@ class gr_complex_to_real : public gr_sync_block
  * \ingroup converter_blk
  * \param vlen	vector len (default 1)
  */
-class gr_complex_to_imag : public gr_sync_block
+class GR_CORE_API gr_complex_to_imag : public gr_sync_block
 {
-  friend gr_complex_to_imag_sptr gr_make_complex_to_imag (unsigned int vlen);
+  friend GR_CORE_API gr_complex_to_imag_sptr gr_make_complex_to_imag (unsigned int vlen);
   gr_complex_to_imag (unsigned int vlen);
 
   unsigned int	d_vlen;
@@ -106,9 +107,9 @@ class gr_complex_to_imag : public gr_sync_block
  * \ingroup converter_blk
  * \param vlen	vector len (default 1)
  */
-class gr_complex_to_mag : public gr_sync_block
+class GR_CORE_API gr_complex_to_mag : public gr_sync_block
 {
-  friend gr_complex_to_mag_sptr gr_make_complex_to_mag (unsigned int vlen);
+  friend GR_CORE_API gr_complex_to_mag_sptr gr_make_complex_to_mag (unsigned int vlen);
   gr_complex_to_mag (unsigned int vlen);
 
   unsigned int	d_vlen;
@@ -124,9 +125,9 @@ class gr_complex_to_mag : public gr_sync_block
  * \ingroup converter_blk
  * \param vlen	vector len (default 1)
  */
-class gr_complex_to_mag_squared : public gr_sync_block
+class GR_CORE_API gr_complex_to_mag_squared : public gr_sync_block
 {
-  friend gr_complex_to_mag_squared_sptr gr_make_complex_to_mag_squared (unsigned int vlen);
+  friend GR_CORE_API gr_complex_to_mag_squared_sptr gr_make_complex_to_mag_squared (unsigned int vlen);
   gr_complex_to_mag_squared (unsigned int vlen);
 
   unsigned int	d_vlen;
@@ -142,9 +143,9 @@ class gr_complex_to_mag_squared : public gr_sync_block
  * \ingroup converter_blk
  * \param vlen	vector len (default 1)
  */
-class gr_complex_to_arg : public gr_sync_block
+class GR_CORE_API gr_complex_to_arg : public gr_sync_block
 {
-  friend gr_complex_to_arg_sptr gr_make_complex_to_arg (unsigned int vlen);
+  friend GR_CORE_API gr_complex_to_arg_sptr gr_make_complex_to_arg (unsigned int vlen);
   gr_complex_to_arg (unsigned int vlen);
 
   unsigned int	d_vlen;
diff --git a/gnuradio-core/src/lib/general/gr_conjugate_cc.h b/gnuradio-core/src/lib/general/gr_conjugate_cc.h
index 783019adbc..16e76e1537 100644
--- a/gnuradio-core/src/lib/general/gr_conjugate_cc.h
+++ b/gnuradio-core/src/lib/general/gr_conjugate_cc.h
@@ -25,20 +25,21 @@
 #ifndef INCLUDED_GR_CONJUGATE_CC_H
 #define INCLUDED_GR_CONJUGATE_CC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_conjugate_cc;
 typedef boost::shared_ptr<gr_conjugate_cc> gr_conjugate_cc_sptr;
 
-gr_conjugate_cc_sptr gr_make_conjugate_cc ();
+GR_CORE_API gr_conjugate_cc_sptr gr_make_conjugate_cc ();
 
 /*!
  * \brief output = complex conjugate of input
  * \ingroup math_blk
  */
-class gr_conjugate_cc : public gr_sync_block
+class GR_CORE_API gr_conjugate_cc : public gr_sync_block
 {
-  friend gr_conjugate_cc_sptr gr_make_conjugate_cc ();
+  friend GR_CORE_API gr_conjugate_cc_sptr gr_make_conjugate_cc ();
 
   gr_conjugate_cc ();
 
diff --git a/gnuradio-core/src/lib/general/gr_constants.h b/gnuradio-core/src/lib/general/gr_constants.h
index 449d41c174..3d21fe1d65 100644
--- a/gnuradio-core/src/lib/general/gr_constants.h
+++ b/gnuradio-core/src/lib/general/gr_constants.h
@@ -22,31 +22,32 @@
 #ifndef INCLUDED_GR_CONSTANTS_H
 #define INCLUDED_GR_CONSTANTS_H
 
+#include <gr_core_api.h>
 #include <string>
 
 /*!
  * \brief return ./configure --prefix argument.  Typically /usr/local
  */
-const std::string gr_prefix();
+GR_CORE_API const std::string gr_prefix();
 
 /*!
  * \brief return ./configure --sysconfdir argument.  Typically $prefix/etc or /etc
  */
-const std::string gr_sysconfdir();
+GR_CORE_API const std::string gr_sysconfdir();
 
 /*!
  * \brief return preferences file directory.  Typically $sysconfdir/etc/conf.d
  */
-const std::string gr_prefsdir();
+GR_CORE_API const std::string gr_prefsdir();
 
 /*!
  * \brief return date/time of build, as set when 'bootstrap' is run
  */
-const std::string gr_build_date();
+GR_CORE_API const std::string gr_build_date();
 
 /*!
  * \brief return version string defined in configure.ac
  */
-const std::string gr_version();
+GR_CORE_API const std::string gr_version();
 
 #endif /* INCLUDED_GR_CONSTANTS_H */
diff --git a/gnuradio-core/src/lib/general/gr_constellation_decoder_cb.h b/gnuradio-core/src/lib/general/gr_constellation_decoder_cb.h
index fd7079c12a..d1d29847c1 100644
--- a/gnuradio-core/src/lib/general/gr_constellation_decoder_cb.h
+++ b/gnuradio-core/src/lib/general/gr_constellation_decoder_cb.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_CONSTELLATION_DECODER_CB_H
 #define INCLUDED_GR_CONSTELLATION_DECODER_CB_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <vector>
 
 class gr_constellation_decoder_cb;
 typedef boost::shared_ptr<gr_constellation_decoder_cb> gr_constellation_decoder_cb_sptr;
 
-gr_constellation_decoder_cb_sptr 
+GR_CORE_API gr_constellation_decoder_cb_sptr 
 	gr_make_constellation_decoder_cb (const std::vector<gr_complex> &sym_position,
 					  const std::vector<unsigned char> &sym_value_out);
 
@@ -38,14 +39,14 @@ gr_constellation_decoder_cb_sptr
  * \ingroup coding_blk
  *
  */
-class gr_constellation_decoder_cb : public gr_sync_block
+class GR_CORE_API gr_constellation_decoder_cb : public gr_sync_block
 {
 
  private:
   std::vector<gr_complex> d_sym_position;
   std::vector<unsigned char> d_sym_value_out;
 
-  friend gr_constellation_decoder_cb_sptr 
+  friend GR_CORE_API gr_constellation_decoder_cb_sptr 
 		gr_make_constellation_decoder_cb (const std::vector<gr_complex> &sym_position, 						          const std::vector<unsigned char> &sym_value_out);
   
   gr_constellation_decoder_cb (const std::vector<gr_complex> &sym_position, 
diff --git a/gnuradio-core/src/lib/general/gr_copy.h b/gnuradio-core/src/lib/general/gr_copy.h
index d99aef8b74..7fb13bf68d 100644
--- a/gnuradio-core/src/lib/general/gr_copy.h
+++ b/gnuradio-core/src/lib/general/gr_copy.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_COPY_H
 #define INCLUDED_GR_COPY_H
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 
 class gr_copy;
 typedef boost::shared_ptr<gr_copy> gr_copy_sptr;
 
-gr_copy_sptr gr_make_copy(size_t itemsize);
+GR_CORE_API gr_copy_sptr gr_make_copy(size_t itemsize);
 
 /*!
  * \brief output[i] = input[i]
@@ -38,12 +39,12 @@ gr_copy_sptr gr_make_copy(size_t itemsize);
  * When disabled, this block drops its input on the floor.
  *
  */
-class gr_copy : public gr_block
+class GR_CORE_API gr_copy : public gr_block
 {
   size_t		d_itemsize;
   bool			d_enabled;
 
-  friend gr_copy_sptr gr_make_copy(size_t itemsize);
+  friend GR_CORE_API gr_copy_sptr gr_make_copy(size_t itemsize);
   gr_copy(size_t itemsize);
 
  public:
diff --git a/gnuradio-core/src/lib/general/gr_core_api.h b/gnuradio-core/src/lib/general/gr_core_api.h
new file mode 100644
index 0000000000..74c802857b
--- /dev/null
+++ b/gnuradio-core/src/lib/general/gr_core_api.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2010-2011 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_GR_CORE_API_H
+#define INCLUDED_GR_CORE_API_H
+
+#include <gruel/attributes.h>
+
+#ifdef gnuradio_core_EXPORTS
+#  define GR_CORE_API __GR_ATTR_EXPORT
+#else
+#  define GR_CORE_API __GR_ATTR_IMPORT
+#endif
+
+#endif /* INCLUDED_GR_CORE_API_H */
diff --git a/gnuradio-core/src/lib/general/gr_correlate_access_code_bb.h b/gnuradio-core/src/lib/general/gr_correlate_access_code_bb.h
index 581713c147..8b5429e393 100644
--- a/gnuradio-core/src/lib/general/gr_correlate_access_code_bb.h
+++ b/gnuradio-core/src/lib/general/gr_correlate_access_code_bb.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_CORRELATE_ACCESS_CODE_BB_H
 #define INCLUDED_GR_CORRELATE_ACCESS_CODE_BB_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <string>
 
@@ -33,7 +34,7 @@ typedef boost::shared_ptr<gr_correlate_access_code_bb> gr_correlate_access_code_
  * \param access_code is represented with 1 byte per bit, e.g., "010101010111000100"
  * \param threshold maximum number of bits that may be wrong
  */
-gr_correlate_access_code_bb_sptr 
+GR_CORE_API gr_correlate_access_code_bb_sptr 
 gr_make_correlate_access_code_bb (const std::string &access_code, int threshold);
 
 /*!
@@ -49,9 +50,9 @@ gr_make_correlate_access_code_bb (const std::string &access_code, int threshold)
  * flag bit and is 1 if the corresponding data bit is the first data
  * bit following the access code. Otherwise the flag bit is 0.
  */
-class gr_correlate_access_code_bb : public gr_sync_block
+class GR_CORE_API gr_correlate_access_code_bb : public gr_sync_block
 {
-  friend gr_correlate_access_code_bb_sptr 
+  friend GR_CORE_API gr_correlate_access_code_bb_sptr 
   gr_make_correlate_access_code_bb (const std::string &access_code, int threshold);
  private:
   unsigned long long d_access_code;	// access code to locate start of packet
diff --git a/gnuradio-core/src/lib/general/gr_costas_loop_cc.h b/gnuradio-core/src/lib/general/gr_costas_loop_cc.h
index 181880f1c5..13b33d96c8 100644
--- a/gnuradio-core/src/lib/general/gr_costas_loop_cc.h
+++ b/gnuradio-core/src/lib/general/gr_costas_loop_cc.h
@@ -24,6 +24,7 @@
 #ifndef INCLUDED_GR_COSTAS_LOOP_CC_H
 #define INCLUDED_GR_COSTAS_LOOP_CC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <stdexcept>
 #include <fstream>
@@ -57,7 +58,7 @@ class gr_costas_loop_cc;
 typedef boost::shared_ptr<gr_costas_loop_cc> gr_costas_loop_cc_sptr;
 
 
-gr_costas_loop_cc_sptr 
+GR_CORE_API gr_costas_loop_cc_sptr 
 gr_make_costas_loop_cc (float alpha, float beta,
 			float max_freq, float min_freq, 
 			int order
@@ -74,9 +75,9 @@ gr_make_costas_loop_cc (float alpha, float beta,
  *
  * \p order must be 2 or 4.
  */
-class gr_costas_loop_cc : public gr_sync_block
+class GR_CORE_API gr_costas_loop_cc : public gr_sync_block
 {
-  friend gr_costas_loop_cc_sptr gr_make_costas_loop_cc (float alpha, float beta,
+  friend GR_CORE_API gr_costas_loop_cc_sptr gr_make_costas_loop_cc (float alpha, float beta,
 							float max_freq, float min_freq, 
 							int order
 							) throw (std::invalid_argument);
diff --git a/gnuradio-core/src/lib/general/gr_count_bits.h b/gnuradio-core/src/lib/general/gr_count_bits.h
index a8b52d3ac3..f0cec2a111 100644
--- a/gnuradio-core/src/lib/general/gr_count_bits.h
+++ b/gnuradio-core/src/lib/general/gr_count_bits.h
@@ -23,9 +23,11 @@
 #ifndef _GR_COUNT_BITS_H_
 #define _GR_COUNT_BITS_H_
 
-unsigned int gr_count_bits8(unsigned int x);	// return number of set bits in the low  8 bits of x
-unsigned int gr_count_bits16(unsigned int x);	// return number of set bits in the low 16 bits of x
-unsigned int gr_count_bits32(unsigned int x);	// return number of set bits in the low 32 bits of x
-unsigned int gr_count_bits64(unsigned long long int x);
+#include <gr_core_api.h>
+
+GR_CORE_API unsigned int gr_count_bits8(unsigned int x);	// return number of set bits in the low  8 bits of x
+GR_CORE_API unsigned int gr_count_bits16(unsigned int x);	// return number of set bits in the low 16 bits of x
+GR_CORE_API unsigned int gr_count_bits32(unsigned int x);	// return number of set bits in the low 32 bits of x
+GR_CORE_API unsigned int gr_count_bits64(unsigned long long int x);
 
 #endif /* _GR_COUNT_BITS_H_ */
diff --git a/gnuradio-core/src/lib/general/gr_cpfsk_bc.h b/gnuradio-core/src/lib/general/gr_cpfsk_bc.h
index 29bcfed654..4afba4fb48 100644
--- a/gnuradio-core/src/lib/general/gr_cpfsk_bc.h
+++ b/gnuradio-core/src/lib/general/gr_cpfsk_bc.h
@@ -20,13 +20,14 @@
 #ifndef INCLUDED_GR_CPFSK_BC_H
 #define INCLUDED_GR_CPFSK_BC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_interpolator.h>
 
 class gr_cpfsk_bc;
 
 typedef boost::shared_ptr<gr_cpfsk_bc> gr_cpfsk_bc_sptr;
 
-gr_cpfsk_bc_sptr gr_make_cpfsk_bc(float k, float ampl, int samples_per_sym);
+GR_CORE_API gr_cpfsk_bc_sptr gr_make_cpfsk_bc(float k, float ampl, int samples_per_sym);
 
 /*!
  * \brief Perform continuous phase 2-level frequency shift keying modulation 
@@ -38,10 +39,10 @@ gr_cpfsk_bc_sptr gr_make_cpfsk_bc(float k, float ampl, int samples_per_sym);
  * \param samples_per_sym	number of output samples per input bit
  */
 
-class gr_cpfsk_bc : public gr_sync_interpolator
+class GR_CORE_API gr_cpfsk_bc : public gr_sync_interpolator
 {
 private:
-  friend gr_cpfsk_bc_sptr gr_make_cpfsk_bc(float k, float ampl, int samples_per_sym);
+  friend GR_CORE_API gr_cpfsk_bc_sptr gr_make_cpfsk_bc(float k, float ampl, int samples_per_sym);
 
   gr_cpfsk_bc(float k, float ampl, int samples_per_sym);
 
diff --git a/gnuradio-core/src/lib/general/gr_crc32.h b/gnuradio-core/src/lib/general/gr_crc32.h
index 87a8d15f29..b59bf9cdcf 100644
--- a/gnuradio-core/src/lib/general/gr_crc32.h
+++ b/gnuradio-core/src/lib/general/gr_crc32.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_CRC32_H
 #define INCLUDED_GR_CRC32_H
 
+#include <gr_core_api.h>
 #include <string>
 #include <gr_types.h>
 
@@ -35,16 +36,16 @@
  * complement of the final running CRC.  The resulting CRC should be
  * transmitted in big endian order.
  */
-unsigned int 
+GR_CORE_API unsigned int 
 gr_update_crc32(unsigned int crc, const unsigned char *buf, size_t len);
 
-unsigned int 
+GR_CORE_API unsigned int 
 gr_update_crc32(unsigned int crc, const std::string buf);
 
-unsigned int 
+GR_CORE_API unsigned int 
 gr_crc32(const unsigned char *buf, size_t len);
 
-unsigned int 
+GR_CORE_API unsigned int 
 gr_crc32(const std::string buf);
 
 #endif /* INCLUDED_CRC32_H */
diff --git a/gnuradio-core/src/lib/general/gr_ctcss_squelch_ff.h b/gnuradio-core/src/lib/general/gr_ctcss_squelch_ff.h
index 49df785fff..664c408468 100644
--- a/gnuradio-core/src/lib/general/gr_ctcss_squelch_ff.h
+++ b/gnuradio-core/src/lib/general/gr_ctcss_squelch_ff.h
@@ -23,20 +23,21 @@
 #ifndef INCLUDED_GR_CTCSS_SQUELCH_FF_H
 #define INCLUDED_GR_CTCSS_SQUELCH_FF_H
 
+#include <gr_core_api.h>
 #include <gr_squelch_base_ff.h>
 #include <gri_goertzel.h>
 
 class gr_ctcss_squelch_ff;
 typedef boost::shared_ptr<gr_ctcss_squelch_ff> gr_ctcss_squelch_ff_sptr;
 
-gr_ctcss_squelch_ff_sptr 
+GR_CORE_API gr_ctcss_squelch_ff_sptr 
 gr_make_ctcss_squelch_ff(int rate, float freq, float level=0.01, int len=0, int ramp=0, bool gate=false);
 
 /*!
  * \brief gate or zero output if ctcss tone not present
  * \ingroup level_blk
  */
-class gr_ctcss_squelch_ff : public gr_squelch_base_ff
+class GR_CORE_API gr_ctcss_squelch_ff : public gr_squelch_base_ff
 {
 private:
   float d_freq;
@@ -48,7 +49,7 @@ private:
   gri_goertzel d_goertzel_c;
   gri_goertzel d_goertzel_r;
 
-  friend gr_ctcss_squelch_ff_sptr gr_make_ctcss_squelch_ff(int rate, float freq, float level, int len, int ramp, bool gate);
+  friend GR_CORE_API gr_ctcss_squelch_ff_sptr gr_make_ctcss_squelch_ff(int rate, float freq, float level, int len, int ramp, bool gate);
   gr_ctcss_squelch_ff(int rate, float freq, float level, int len, int ramp, bool gate);
 
   int find_tone(float freq);
diff --git a/gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.h b/gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.h
index 50a6c9d899..3db2501019 100644
--- a/gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.h
+++ b/gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.h
@@ -20,17 +20,18 @@
 #ifndef INCLUDED_GR_DECODE_CCSDS_27_FB_H
 #define INCLUDED_GR_DECODE_CCSDS_27_FB_H
 
+#include <gr_core_api.h>
 #include <gr_sync_decimator.h>
 
 extern "C" {
-#include "../viterbi/viterbi.h"
+#include <viterbi.h>
 }
 
 class gr_decode_ccsds_27_fb;
 
 typedef boost::shared_ptr<gr_decode_ccsds_27_fb> gr_decode_ccsds_27_fb_sptr;
 
-gr_decode_ccsds_27_fb_sptr gr_make_decode_ccsds_27_fb();
+GR_CORE_API gr_decode_ccsds_27_fb_sptr gr_make_decode_ccsds_27_fb();
 
 /*! \brief A rate 1/2, k=7 convolutional decoder for the CCSDS standard
  * \ingroup ecc
@@ -51,10 +52,10 @@ gr_decode_ccsds_27_fb_sptr gr_make_decode_ccsds_27_fb();
  * from the corresponding inputs.
  */
 
-class gr_decode_ccsds_27_fb : public gr_sync_decimator
+class GR_CORE_API gr_decode_ccsds_27_fb : public gr_sync_decimator
 {
 private:
-  friend gr_decode_ccsds_27_fb_sptr gr_make_decode_ccsds_27_fb();
+  friend GR_CORE_API gr_decode_ccsds_27_fb_sptr gr_make_decode_ccsds_27_fb();
 
   gr_decode_ccsds_27_fb();
 
diff --git a/gnuradio-core/src/lib/general/gr_deinterleave.h b/gnuradio-core/src/lib/general/gr_deinterleave.h
index 59c310bdc4..3dd913911e 100644
--- a/gnuradio-core/src/lib/general/gr_deinterleave.h
+++ b/gnuradio-core/src/lib/general/gr_deinterleave.h
@@ -23,20 +23,21 @@
 #ifndef INCLUDED_GR_DEINTERLEAVE_H
 #define INCLUDED_GR_DEINTERLEAVE_H
 
+#include <gr_core_api.h>
 #include <gr_sync_decimator.h>
 
 class gr_deinterleave;
 typedef boost::shared_ptr<gr_deinterleave> gr_deinterleave_sptr;
 
-gr_deinterleave_sptr gr_make_deinterleave (size_t itemsize);
+GR_CORE_API gr_deinterleave_sptr gr_make_deinterleave (size_t itemsize);
 
 /*!
  * \brief deinterleave a single input into N outputs
  * \ingroup slicedice_blk
  */
-class gr_deinterleave : public gr_sync_decimator
+class GR_CORE_API gr_deinterleave : public gr_sync_decimator
 {
-  friend gr_deinterleave_sptr gr_make_deinterleave (size_t itemsize);
+  friend GR_CORE_API gr_deinterleave_sptr gr_make_deinterleave (size_t itemsize);
 
   size_t	d_itemsize;
 
diff --git a/gnuradio-core/src/lib/general/gr_delay.h b/gnuradio-core/src/lib/general/gr_delay.h
index d7e8252a27..14de9af1fe 100644
--- a/gnuradio-core/src/lib/general/gr_delay.h
+++ b/gnuradio-core/src/lib/general/gr_delay.h
@@ -23,20 +23,21 @@
 #ifndef INCLUDED_GR_DELAY_H
 #define INCLUDED_GR_DELAY_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_delay;
 typedef boost::shared_ptr<gr_delay> gr_delay_sptr;
 
-gr_delay_sptr gr_make_delay (size_t itemsize, int delay);
+GR_CORE_API gr_delay_sptr gr_make_delay (size_t itemsize, int delay);
 
 /*!
  * \brief delay the input by a certain number of samples
  * \ingroup misc_blk
  */
-class gr_delay : public gr_sync_block
+class GR_CORE_API gr_delay : public gr_sync_block
 {
-  friend gr_delay_sptr gr_make_delay (size_t itemsize, int delay);
+  friend GR_CORE_API gr_delay_sptr gr_make_delay (size_t itemsize, int delay);
 
   gr_delay (size_t itemsize, int delay);
 
diff --git a/gnuradio-core/src/lib/general/gr_descrambler_bb.h b/gnuradio-core/src/lib/general/gr_descrambler_bb.h
index 19787690cc..d7a49b5f1f 100644
--- a/gnuradio-core/src/lib/general/gr_descrambler_bb.h
+++ b/gnuradio-core/src/lib/general/gr_descrambler_bb.h
@@ -22,13 +22,14 @@
 #ifndef INCLUDED_GR_DESCRAMBLER_BB_H
 #define INCLUDED_GR_DESCRAMBLER_BB_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include "gri_lfsr.h"
 
 class gr_descrambler_bb;
 typedef boost::shared_ptr<gr_descrambler_bb> gr_descrambler_bb_sptr;
 
-gr_descrambler_bb_sptr gr_make_descrambler_bb(int mask, int seed, int len);
+GR_CORE_API gr_descrambler_bb_sptr gr_make_descrambler_bb(int mask, int seed, int len);
 
 /*!
  * Descramble an input stream using an LFSR.  This block works on the LSB only
@@ -42,9 +43,9 @@ gr_descrambler_bb_sptr gr_make_descrambler_bb(int mask, int seed, int len);
  * \ingroup coding_blk
  */
 
-class gr_descrambler_bb : public gr_sync_block
+class GR_CORE_API gr_descrambler_bb : public gr_sync_block
 {
-  friend gr_descrambler_bb_sptr gr_make_descrambler_bb(int mask, int seed, int len);
+  friend GR_CORE_API gr_descrambler_bb_sptr gr_make_descrambler_bb(int mask, int seed, int len);
 
   gri_lfsr d_lfsr;
 
diff --git a/gnuradio-core/src/lib/general/gr_diff_decoder_bb.h b/gnuradio-core/src/lib/general/gr_diff_decoder_bb.h
index 6fd08ec4b5..0337c3dbda 100644
--- a/gnuradio-core/src/lib/general/gr_diff_decoder_bb.h
+++ b/gnuradio-core/src/lib/general/gr_diff_decoder_bb.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_DIFF_DECODER_BB_H
 #define INCLUDED_GR_DIFF_DECODER_BB_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_diff_decoder_bb;
 typedef boost::shared_ptr<gr_diff_decoder_bb> gr_diff_decoder_bb_sptr;
 
-gr_diff_decoder_bb_sptr gr_make_diff_decoder_bb (unsigned int modulus);
+GR_CORE_API gr_diff_decoder_bb_sptr gr_make_diff_decoder_bb (unsigned int modulus);
 
 /*!
  * \brief y[0] = (x[0] - x[-1]) % M
@@ -36,9 +37,9 @@ gr_diff_decoder_bb_sptr gr_make_diff_decoder_bb (unsigned int modulus);
  *
  * Differential decoder
  */
-class gr_diff_decoder_bb : public gr_sync_block
+class GR_CORE_API gr_diff_decoder_bb : public gr_sync_block
 {
-  friend gr_diff_decoder_bb_sptr gr_make_diff_decoder_bb (unsigned int modulus);
+  friend GR_CORE_API gr_diff_decoder_bb_sptr gr_make_diff_decoder_bb (unsigned int modulus);
   gr_diff_decoder_bb(unsigned int modulus);
 
   unsigned int	d_modulus;
diff --git a/gnuradio-core/src/lib/general/gr_diff_encoder_bb.h b/gnuradio-core/src/lib/general/gr_diff_encoder_bb.h
index 50aff73cf2..c99e226da2 100644
--- a/gnuradio-core/src/lib/general/gr_diff_encoder_bb.h
+++ b/gnuradio-core/src/lib/general/gr_diff_encoder_bb.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_DIFF_ENCODER_BB_H
 #define INCLUDED_GR_DIFF_ENCODER_BB_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_diff_encoder_bb;
 typedef boost::shared_ptr<gr_diff_encoder_bb> gr_diff_encoder_bb_sptr;
 
-gr_diff_encoder_bb_sptr gr_make_diff_encoder_bb (unsigned int modulus);
+GR_CORE_API gr_diff_encoder_bb_sptr gr_make_diff_encoder_bb (unsigned int modulus);
 
 /*!
  * \brief y[0] = (x[0] + y[-1]) % M
@@ -36,9 +37,9 @@ gr_diff_encoder_bb_sptr gr_make_diff_encoder_bb (unsigned int modulus);
  *
  * Differential encoder
  */
-class gr_diff_encoder_bb : public gr_sync_block
+class GR_CORE_API gr_diff_encoder_bb : public gr_sync_block
 {
-  friend gr_diff_encoder_bb_sptr gr_make_diff_encoder_bb (unsigned int modulus);
+  friend GR_CORE_API gr_diff_encoder_bb_sptr gr_make_diff_encoder_bb (unsigned int modulus);
   gr_diff_encoder_bb(unsigned int modulus);
 
   unsigned int	d_last_out;
diff --git a/gnuradio-core/src/lib/general/gr_diff_phasor_cc.h b/gnuradio-core/src/lib/general/gr_diff_phasor_cc.h
index 1070ba183b..8af2699a7a 100644
--- a/gnuradio-core/src/lib/general/gr_diff_phasor_cc.h
+++ b/gnuradio-core/src/lib/general/gr_diff_phasor_cc.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_DIFF_PHASOR_CC_H
 #define INCLUDED_GR_DIFF_PHASOR_CC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 /*!
@@ -32,12 +33,12 @@
 class gr_diff_phasor_cc;
 typedef boost::shared_ptr<gr_diff_phasor_cc> gr_diff_phasor_cc_sptr;
 
-gr_diff_phasor_cc_sptr gr_make_diff_phasor_cc ();
+GR_CORE_API gr_diff_phasor_cc_sptr gr_make_diff_phasor_cc ();
 
 
-class gr_diff_phasor_cc : public gr_sync_block
+class GR_CORE_API gr_diff_phasor_cc : public gr_sync_block
 {
-  friend gr_diff_phasor_cc_sptr gr_make_diff_phasor_cc ();
+  friend GR_CORE_API gr_diff_phasor_cc_sptr gr_make_diff_phasor_cc ();
 
   gr_diff_phasor_cc ();  //constructor
 
diff --git a/gnuradio-core/src/lib/general/gr_dpll_bb.h b/gnuradio-core/src/lib/general/gr_dpll_bb.h
index e6b5fc0fa8..8e748dddb6 100644
--- a/gnuradio-core/src/lib/general/gr_dpll_bb.h
+++ b/gnuradio-core/src/lib/general/gr_dpll_bb.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_DPLL_BB_H
 #define INCLUDED_GR_DPLL_BB_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_dpll_bb;
 typedef boost::shared_ptr<gr_dpll_bb> gr_dpll_bb_sptr;
 
-gr_dpll_bb_sptr gr_make_dpll_bb (float period, float gain);
+GR_CORE_API gr_dpll_bb_sptr gr_make_dpll_bb (float period, float gain);
 
 /*!
  * \brief Detect the peak of a signal
@@ -37,9 +38,9 @@ gr_dpll_bb_sptr gr_make_dpll_bb (float period, float gain);
  * If a peak is detected, this block outputs a 1, 
  * or it outputs 0's.
  */
-class gr_dpll_bb : public gr_sync_block
+class GR_CORE_API gr_dpll_bb : public gr_sync_block
 {
-  friend gr_dpll_bb_sptr gr_make_dpll_bb (float period, float gain);
+  friend GR_CORE_API gr_dpll_bb_sptr gr_make_dpll_bb (float period, float gain);
 
   gr_dpll_bb (float period, float gain);
 
diff --git a/gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.h b/gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.h
index 86832ee057..e24ae91511 100644
--- a/gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.h
+++ b/gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.h
@@ -20,13 +20,14 @@
 #ifndef INCLUDED_GR_ENCODE_CCSDS_27_BB_H
 #define INCLUDED_GR_ENCODE_CCSDS_27_BB_H
 
+#include <gr_core_api.h>
 #include <gr_sync_interpolator.h>
 
 class gr_encode_ccsds_27_bb;
 
 typedef boost::shared_ptr<gr_encode_ccsds_27_bb> gr_encode_ccsds_27_bb_sptr;
 
-gr_encode_ccsds_27_bb_sptr gr_make_encode_ccsds_27_bb();
+GR_CORE_API gr_encode_ccsds_27_bb_sptr gr_make_encode_ccsds_27_bb();
 
 /*! \brief A rate 1/2, k=7 convolutional encoder for the CCSDS standard
  * \ingroup ecc
@@ -44,10 +45,10 @@ gr_encode_ccsds_27_bb_sptr gr_make_encode_ccsds_27_bb();
  * There is no provision to "flush" the encoder.
  */
 
-class gr_encode_ccsds_27_bb : public gr_sync_interpolator
+class GR_CORE_API gr_encode_ccsds_27_bb : public gr_sync_interpolator
 {
 private:
-  friend gr_encode_ccsds_27_bb_sptr gr_make_encode_ccsds_27_bb();
+  friend GR_CORE_API gr_encode_ccsds_27_bb_sptr gr_make_encode_ccsds_27_bb();
 
   gr_encode_ccsds_27_bb();
   unsigned char d_encstate;
diff --git a/gnuradio-core/src/lib/general/gr_expj.h b/gnuradio-core/src/lib/general/gr_expj.h
index 7adf3a0c6c..6f1d56eb3f 100644
--- a/gnuradio-core/src/lib/general/gr_expj.h
+++ b/gnuradio-core/src/lib/general/gr_expj.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_EXPJ_H
 #define INCLUDED_GR_EXPJ_H
 
+#include <gr_core_api.h>
 #include <gr_sincos.h>
 #include <gr_types.h>
 
diff --git a/gnuradio-core/src/lib/general/gr_fake_channel_coder_pp.h b/gnuradio-core/src/lib/general/gr_fake_channel_coder_pp.h
index 480fb8e782..2560c6105b 100644
--- a/gnuradio-core/src/lib/general/gr_fake_channel_coder_pp.h
+++ b/gnuradio-core/src/lib/general/gr_fake_channel_coder_pp.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_FAKE_CHANNEL_CODER_PP_H
 #define INCLUDED_GR_FAKE_CHANNEL_CODER_PP_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_fake_channel_encoder_pp;
 typedef boost::shared_ptr<gr_fake_channel_encoder_pp> gr_fake_channel_encoder_pp_sptr;
 
-gr_fake_channel_encoder_pp_sptr
+GR_CORE_API gr_fake_channel_encoder_pp_sptr
 gr_make_fake_channel_encoder_pp(int input_vlen, int output_vlen);
 
 /*!
@@ -37,14 +38,14 @@ gr_make_fake_channel_encoder_pp(int input_vlen, int output_vlen);
  *
  * input: stream of byte vectors; output: stream of byte vectors
  */
-class gr_fake_channel_encoder_pp : public gr_sync_block
+class GR_CORE_API gr_fake_channel_encoder_pp : public gr_sync_block
 {
   int	d_input_vlen;
   int	d_output_vlen;
   
   gr_fake_channel_encoder_pp(int input_vlen, int output_vlen);
 
-  friend gr_fake_channel_encoder_pp_sptr
+  friend GR_CORE_API gr_fake_channel_encoder_pp_sptr
          gr_make_fake_channel_encoder_pp(int input_vlen, int output_vlen);
   
 public:
@@ -60,7 +61,7 @@ public:
 class gr_fake_channel_decoder_pp;
 typedef boost::shared_ptr<gr_fake_channel_decoder_pp> gr_fake_channel_decoder_pp_sptr;
 
-gr_fake_channel_decoder_pp_sptr
+GR_CORE_API gr_fake_channel_decoder_pp_sptr
 gr_make_fake_channel_decoder_pp(int input_vlen, int output_vlen);
 
 /*!
@@ -69,14 +70,14 @@ gr_make_fake_channel_decoder_pp(int input_vlen, int output_vlen);
  *
  * input: stream of byte vectors; output: stream of byte vectors
  */
-class gr_fake_channel_decoder_pp : public gr_sync_block
+class GR_CORE_API gr_fake_channel_decoder_pp : public gr_sync_block
 {
   int	d_input_vlen;
   int	d_output_vlen;
   
   gr_fake_channel_decoder_pp(int input_vlen, int output_vlen);
 
-  friend gr_fake_channel_decoder_pp_sptr
+  friend GR_CORE_API gr_fake_channel_decoder_pp_sptr
          gr_make_fake_channel_decoder_pp(int input_vlen, int output_vlen);
   
 public:
diff --git a/gnuradio-core/src/lib/general/gr_feedforward_agc_cc.h b/gnuradio-core/src/lib/general/gr_feedforward_agc_cc.h
index 8c600d3d16..a97dbd958f 100644
--- a/gnuradio-core/src/lib/general/gr_feedforward_agc_cc.h
+++ b/gnuradio-core/src/lib/general/gr_feedforward_agc_cc.h
@@ -23,21 +23,22 @@
 #ifndef INCLUDED_GR_FEEDFORWARD_AGC_CC_H
 #define INCLUDED_GR_FEEDFORWARD_AGC_CC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_feedforward_agc_cc;
 typedef boost::shared_ptr<gr_feedforward_agc_cc> gr_feedforward_agc_cc_sptr;
 
-gr_feedforward_agc_cc_sptr
+GR_CORE_API gr_feedforward_agc_cc_sptr
 gr_make_feedforward_agc_cc(int nsamples, float reference = 1.0);
 
 /*!
  * \brief Non-causal AGC which computes required gain based on max absolute value over nsamples
  * \ingroup level_blk
  */
-class gr_feedforward_agc_cc : public gr_sync_block
+class GR_CORE_API gr_feedforward_agc_cc : public gr_sync_block
 {
-  friend gr_feedforward_agc_cc_sptr 
+  friend GR_CORE_API gr_feedforward_agc_cc_sptr 
   gr_make_feedforward_agc_cc(int nsamples, float reference);
   
   int		d_nsamples;
diff --git a/gnuradio-core/src/lib/general/gr_feval.h b/gnuradio-core/src/lib/general/gr_feval.h
index cc4209af03..a0e448ebf8 100644
--- a/gnuradio-core/src/lib/general/gr_feval.h
+++ b/gnuradio-core/src/lib/general/gr_feval.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_FEVAL_H
 #define INCLUDED_GR_FEVAL_H
 
+#include <gr_core_api.h>
 #include <gr_complex.h>
 
 /*!
@@ -37,7 +38,7 @@
  * Use calleval to invoke eval (this kludge is required to allow a
  * python specific "shim" to be inserted.
  */
-class gr_feval_dd
+class GR_CORE_API gr_feval_dd
 {
 protected:
   /*!
@@ -65,7 +66,7 @@ public:
  * Use calleval to invoke eval (this kludge is required to allow a
  * python specific "shim" to be inserted.
  */
-class gr_feval_cc
+class GR_CORE_API gr_feval_cc
 {
 protected:
   /*!
@@ -93,7 +94,7 @@ public:
  * Use calleval to invoke eval (this kludge is required to allow a
  * python specific "shim" to be inserted.
  */
-class gr_feval_ll
+class GR_CORE_API gr_feval_ll
 {
 protected:
   /*!
@@ -121,7 +122,7 @@ public:
  * Use calleval to invoke eval (this kludge is required to allow a
  * python specific "shim" to be inserted.
  */
-class gr_feval
+class GR_CORE_API gr_feval
 {
 protected:
   /*!
@@ -139,9 +140,9 @@ public:
 /*!
  * \brief trivial examples / test cases showing C++ calling Python code
  */
-double     gr_feval_dd_example(gr_feval_dd *f, double x);
-gr_complex gr_feval_cc_example(gr_feval_cc *f, gr_complex x);
-long       gr_feval_ll_example(gr_feval_ll *f, long x);
-void       gr_feval_example(gr_feval *f);
+GR_CORE_API double     gr_feval_dd_example(gr_feval_dd *f, double x);
+GR_CORE_API gr_complex gr_feval_cc_example(gr_feval_cc *f, gr_complex x);
+GR_CORE_API long       gr_feval_ll_example(gr_feval_ll *f, long x);
+GR_CORE_API void       gr_feval_example(gr_feval *f);
 
 #endif /* INCLUDED_GR_FEVAL_H */
diff --git a/gnuradio-core/src/lib/general/gr_fft_vcc.h b/gnuradio-core/src/lib/general/gr_fft_vcc.h
index 2ab9241ec3..a7c8e1162b 100644
--- a/gnuradio-core/src/lib/general/gr_fft_vcc.h
+++ b/gnuradio-core/src/lib/general/gr_fft_vcc.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_FFT_VCC_H
 #define INCLUDED_GR_FFT_VCC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_fft_vcc;
 typedef boost::shared_ptr<gr_fft_vcc> gr_fft_vcc_sptr;
 
-gr_fft_vcc_sptr
+GR_CORE_API gr_fft_vcc_sptr
 gr_make_fft_vcc (int fft_size, bool forward, const std::vector<float> &window, bool shift=false);
 
 /*!
@@ -37,10 +38,10 @@ gr_make_fft_vcc (int fft_size, bool forward, const std::vector<float> &window, b
  *
  * Abstract base class
  */
-class gr_fft_vcc : public gr_sync_block
+class GR_CORE_API gr_fft_vcc : public gr_sync_block
 {
 protected:
-  friend gr_fft_vcc_sptr
+  friend GR_CORE_API gr_fft_vcc_sptr
   gr_make_fft_vcc (int fft_size, bool forward, const std::vector<float> &window, bool shift);
 
   unsigned int	       d_fft_size;
diff --git a/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.h b/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.h
index c026162ee5..8535d133c0 100644
--- a/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.h
+++ b/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.h
@@ -23,11 +23,12 @@
 #ifndef INCLUDED_GR_FFT_VCC_FFTW_H
 #define INCLUDED_GR_FFT_VCC_FFTW_H
 
+#include <gr_core_api.h>
 #include <gr_fft_vcc.h>
 
 class gri_fft_complex;
 
-gr_fft_vcc_sptr
+GR_CORE_API gr_fft_vcc_sptr
 gr_make_fft_vcc_fftw (int fft_size, bool forward, const std::vector<float> &window, bool shift=false);
 
 /*!
@@ -36,9 +37,9 @@ gr_make_fft_vcc_fftw (int fft_size, bool forward, const std::vector<float> &wind
  *
  * Concrete class that uses FFTW.
  */
-class gr_fft_vcc_fftw : public gr_fft_vcc
+class GR_CORE_API gr_fft_vcc_fftw : public gr_fft_vcc
 {
-  friend gr_fft_vcc_sptr
+  friend GR_CORE_API gr_fft_vcc_sptr
   gr_make_fft_vcc_fftw (int fft_size, bool forward, const std::vector<float> &window, bool shift);
 
   gri_fft_complex *d_fft;
diff --git a/gnuradio-core/src/lib/general/gr_fft_vfc.h b/gnuradio-core/src/lib/general/gr_fft_vfc.h
index 0745744770..6cf6b90374 100644
--- a/gnuradio-core/src/lib/general/gr_fft_vfc.h
+++ b/gnuradio-core/src/lib/general/gr_fft_vfc.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_FFT_VFC_H
 #define INCLUDED_GR_FFT_VFC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gri_fft_complex;
@@ -30,7 +31,7 @@ class gri_fft_complex;
 class gr_fft_vfc;
 typedef boost::shared_ptr<gr_fft_vfc> gr_fft_vfc_sptr;
 
-gr_fft_vfc_sptr
+GR_CORE_API gr_fft_vfc_sptr
 gr_make_fft_vfc (int fft_size, bool forward, const std::vector<float> &window);
 
 /*!
@@ -38,9 +39,9 @@ gr_make_fft_vfc (int fft_size, bool forward, const std::vector<float> &window);
  * \ingroup dft_blk
  */
 
-class gr_fft_vfc : public gr_sync_block
+class GR_CORE_API gr_fft_vfc : public gr_sync_block
 {
-  friend gr_fft_vfc_sptr
+  friend GR_CORE_API gr_fft_vfc_sptr
   gr_make_fft_vfc (int fft_size, bool forward, const std::vector<float>  &window);
 
   unsigned int  d_fft_size;
diff --git a/gnuradio-core/src/lib/general/gr_firdes.h b/gnuradio-core/src/lib/general/gr_firdes.h
index de775bd071..83fa7e119f 100644
--- a/gnuradio-core/src/lib/general/gr_firdes.h
+++ b/gnuradio-core/src/lib/general/gr_firdes.h
@@ -23,6 +23,7 @@
 #ifndef _GR_FIRDES_H_
 #define _GR_FIRDES_H_
 
+#include <gr_core_api.h>
 #include <vector>
 #include <cmath>
 #include <gr_complex.h>
@@ -32,7 +33,7 @@
  * \ingroup filter_design
  */
 
-class gr_firdes {
+class GR_CORE_API gr_firdes {
  public:
 
   enum win_type {
diff --git a/gnuradio-core/src/lib/general/gr_fll_band_edge_cc.h b/gnuradio-core/src/lib/general/gr_fll_band_edge_cc.h
index db060793e1..e3007b97a3 100644
--- a/gnuradio-core/src/lib/general/gr_fll_band_edge_cc.h
+++ b/gnuradio-core/src/lib/general/gr_fll_band_edge_cc.h
@@ -24,11 +24,12 @@
 #ifndef INCLUDED_GR_FLL_BAND_EDGE_CC_H
 #define	INCLUDED_GR_FLL_BAND_EDGE_CC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_fll_band_edge_cc;
 typedef boost::shared_ptr<gr_fll_band_edge_cc> gr_fll_band_edge_cc_sptr;
-gr_fll_band_edge_cc_sptr gr_make_fll_band_edge_cc (float samps_per_sym, float rolloff,
+GR_CORE_API gr_fll_band_edge_cc_sptr gr_make_fll_band_edge_cc (float samps_per_sym, float rolloff,
 						   int filter_size, float alpha, float beta);
 
 class gr_fir_ccc;
@@ -65,7 +66,7 @@ class gri_fft_complex;
  * entire frequency range to allow their comparisons to be valid.
  */
 
-class gr_fll_band_edge_cc : public gr_sync_block
+class GR_CORE_API gr_fll_band_edge_cc : public gr_sync_block
 {
  private:
   /*!
@@ -76,7 +77,7 @@ class gr_fll_band_edge_cc : public gr_sync_block
    * \param alpha            (float) Loop gain 1
    * \param beta             (float) Loop gain 2
    */
-  friend gr_fll_band_edge_cc_sptr gr_make_fll_band_edge_cc (float samps_per_sym, float rolloff,
+  friend GR_CORE_API gr_fll_band_edge_cc_sptr gr_make_fll_band_edge_cc (float samps_per_sym, float rolloff,
 							    int filter_size, float alpha, float beta);
 
   float                   d_alpha;
diff --git a/gnuradio-core/src/lib/general/gr_float_to_char.h b/gnuradio-core/src/lib/general/gr_float_to_char.h
index e65072bf07..434e2e9d03 100644
--- a/gnuradio-core/src/lib/general/gr_float_to_char.h
+++ b/gnuradio-core/src/lib/general/gr_float_to_char.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_FLOAT_TO_CHAR_H
 #define INCLUDED_GR_FLOAT_TO_CHAR_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_float_to_char;
 typedef boost::shared_ptr<gr_float_to_char> gr_float_to_char_sptr;
 
-gr_float_to_char_sptr
+GR_CORE_API gr_float_to_char_sptr
 gr_make_float_to_char ();
 
 /*!
@@ -36,9 +37,9 @@ gr_make_float_to_char ();
  * \ingroup converter_blk
  */
 
-class gr_float_to_char : public gr_sync_block
+class GR_CORE_API gr_float_to_char : public gr_sync_block
 {
-  friend gr_float_to_char_sptr gr_make_float_to_char ();
+  friend GR_CORE_API gr_float_to_char_sptr gr_make_float_to_char ();
   gr_float_to_char ();
 
  public:
diff --git a/gnuradio-core/src/lib/general/gr_float_to_complex.h b/gnuradio-core/src/lib/general/gr_float_to_complex.h
index f6cc248525..596b595f35 100644
--- a/gnuradio-core/src/lib/general/gr_float_to_complex.h
+++ b/gnuradio-core/src/lib/general/gr_float_to_complex.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_FLOAT_TO_COMPLEX_H
 #define INCLUDED_GR_FLOAT_TO_COMPLEX_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_complex.h>
 
 class gr_float_to_complex;
 typedef boost::shared_ptr<gr_float_to_complex> gr_float_to_complex_sptr;
 
-gr_float_to_complex_sptr
+GR_CORE_API gr_float_to_complex_sptr
 gr_make_float_to_complex (size_t vlen = 1);
 
 /*!
@@ -37,9 +38,9 @@ gr_make_float_to_complex (size_t vlen = 1);
  * \ingroup converter_blk
  */
 
-class gr_float_to_complex : public gr_sync_block
+class GR_CORE_API gr_float_to_complex : public gr_sync_block
 {
-  friend gr_float_to_complex_sptr gr_make_float_to_complex (size_t vlen);
+  friend GR_CORE_API gr_float_to_complex_sptr gr_make_float_to_complex (size_t vlen);
   gr_float_to_complex (size_t vlen);
 
   size_t d_vlen;
diff --git a/gnuradio-core/src/lib/general/gr_float_to_short.h b/gnuradio-core/src/lib/general/gr_float_to_short.h
index e853439293..010d611413 100644
--- a/gnuradio-core/src/lib/general/gr_float_to_short.h
+++ b/gnuradio-core/src/lib/general/gr_float_to_short.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_FLOAT_TO_SHORT_H
 #define INCLUDED_GR_FLOAT_TO_SHORT_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_float_to_short;
 typedef boost::shared_ptr<gr_float_to_short> gr_float_to_short_sptr;
 
-gr_float_to_short_sptr
+GR_CORE_API gr_float_to_short_sptr
 gr_make_float_to_short ();
 
 /*!
@@ -36,9 +37,9 @@ gr_make_float_to_short ();
  * \ingroup converter_blk
  */
 
-class gr_float_to_short : public gr_sync_block
+class GR_CORE_API gr_float_to_short : public gr_sync_block
 {
-  friend gr_float_to_short_sptr gr_make_float_to_short ();
+  friend GR_CORE_API gr_float_to_short_sptr gr_make_float_to_short ();
   gr_float_to_short ();
 
  public:
diff --git a/gnuradio-core/src/lib/general/gr_float_to_uchar.h b/gnuradio-core/src/lib/general/gr_float_to_uchar.h
index 3bca9c555e..fca8eb07b4 100644
--- a/gnuradio-core/src/lib/general/gr_float_to_uchar.h
+++ b/gnuradio-core/src/lib/general/gr_float_to_uchar.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_FLOAT_TO_UCHAR_H
 #define INCLUDED_GR_FLOAT_TO_UCHAR_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_float_to_uchar;
 typedef boost::shared_ptr<gr_float_to_uchar> gr_float_to_uchar_sptr;
 
-gr_float_to_uchar_sptr
+GR_CORE_API gr_float_to_uchar_sptr
 gr_make_float_to_uchar ();
 
 /*!
@@ -36,9 +37,9 @@ gr_make_float_to_uchar ();
  * \ingroup converter_blk
  */
 
-class gr_float_to_uchar : public gr_sync_block
+class GR_CORE_API gr_float_to_uchar : public gr_sync_block
 {
-  friend gr_float_to_uchar_sptr gr_make_float_to_uchar ();
+  friend GR_CORE_API gr_float_to_uchar_sptr gr_make_float_to_uchar ();
   gr_float_to_uchar ();
 
  public:
diff --git a/gnuradio-core/src/lib/general/gr_fmdet_cf.h b/gnuradio-core/src/lib/general/gr_fmdet_cf.h
index 792646bef2..7bf3baa3f5 100644
--- a/gnuradio-core/src/lib/general/gr_fmdet_cf.h
+++ b/gnuradio-core/src/lib/general/gr_fmdet_cf.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_FMDET_CF_H
 #define INCLUDED_GR_FMDET_CF_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_fmdet_cf;
 typedef boost::shared_ptr<gr_fmdet_cf> gr_fmdet_cf_sptr;
 
-gr_fmdet_cf_sptr gr_make_fmdet_cf (float samplerate, float freq_low, float freq_high, float scl);
+GR_CORE_API gr_fmdet_cf_sptr gr_make_fmdet_cf (float samplerate, float freq_low, float freq_high, float scl);
 
 class gr_fir_ccf;
 
@@ -43,9 +44,9 @@ class gr_fir_ccf;
  * normalization by the magnitude of the sample 
  */
 
-class gr_fmdet_cf : public gr_sync_block
+class GR_CORE_API gr_fmdet_cf : public gr_sync_block
 {
-  friend gr_fmdet_cf_sptr gr_make_fmdet_cf (float samplerate, float freq_low,
+  friend GR_CORE_API gr_fmdet_cf_sptr gr_make_fmdet_cf (float samplerate, float freq_low,
 					    float freq_high, float scl);
 
   gr_complex d_S1,d_S2,d_S3,d_S4;
diff --git a/gnuradio-core/src/lib/general/gr_framer_sink_1.h b/gnuradio-core/src/lib/general/gr_framer_sink_1.h
index 3f2e8aa884..95ad6ced75 100644
--- a/gnuradio-core/src/lib/general/gr_framer_sink_1.h
+++ b/gnuradio-core/src/lib/general/gr_framer_sink_1.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_FRAMER_SINK_1_H
 #define INCLUDED_GR_FRAMER_SINK_1_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_msg_queue.h>
 
 class gr_framer_sink_1;
 typedef boost::shared_ptr<gr_framer_sink_1> gr_framer_sink_1_sptr;
 
-gr_framer_sink_1_sptr 
+GR_CORE_API gr_framer_sink_1_sptr 
 gr_make_framer_sink_1 (gr_msg_queue_sptr target_queue);
 
 /*!
@@ -50,9 +51,9 @@ gr_make_framer_sink_1 (gr_msg_queue_sptr target_queue);
  * the first bit of the packet.  That is, this bit is the first
  * one after the access code.
  */
-class gr_framer_sink_1 : public gr_sync_block
+class GR_CORE_API gr_framer_sink_1 : public gr_sync_block
 {
-  friend gr_framer_sink_1_sptr 
+  friend GR_CORE_API gr_framer_sink_1_sptr 
   gr_make_framer_sink_1 (gr_msg_queue_sptr target_queue);
 
  private:
diff --git a/gnuradio-core/src/lib/general/gr_frequency_modulator_fc.h b/gnuradio-core/src/lib/general/gr_frequency_modulator_fc.h
index 385f447b71..932e7da369 100644
--- a/gnuradio-core/src/lib/general/gr_frequency_modulator_fc.h
+++ b/gnuradio-core/src/lib/general/gr_frequency_modulator_fc.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_FREQUENCY_MODULATOR_FC_H
 #define INCLUDED_GR_FREQUENCY_MODULATOR_FC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_frequency_modulator_fc;
 typedef boost::shared_ptr<gr_frequency_modulator_fc> gr_frequency_modulator_fc_sptr;
 
-gr_frequency_modulator_fc_sptr gr_make_frequency_modulator_fc (double sensitivity);
+GR_CORE_API gr_frequency_modulator_fc_sptr gr_make_frequency_modulator_fc (double sensitivity);
 
 /*!
  * \brief Frequency modulator block
@@ -36,12 +37,12 @@ gr_frequency_modulator_fc_sptr gr_make_frequency_modulator_fc (double sensitivit
  *
  * float input; complex baseband output
  */
-class gr_frequency_modulator_fc : public gr_sync_block
+class GR_CORE_API gr_frequency_modulator_fc : public gr_sync_block
 {
   double	d_sensitivity;
   double	d_phase;
 
-  friend gr_frequency_modulator_fc_sptr
+  friend GR_CORE_API gr_frequency_modulator_fc_sptr
   gr_make_frequency_modulator_fc (double sensitivity);
 
   gr_frequency_modulator_fc (double sensitivity);
diff --git a/gnuradio-core/src/lib/general/gr_fxpt.h b/gnuradio-core/src/lib/general/gr_fxpt.h
index c98d31b273..5cf736dfbf 100644
--- a/gnuradio-core/src/lib/general/gr_fxpt.h
+++ b/gnuradio-core/src/lib/general/gr_fxpt.h
@@ -22,10 +22,11 @@
 #ifndef INCLUDED_GR_FXPT_H
 #define INCLUDED_GR_FXPT_H
 
+#include <gr_core_api.h>
 #include <gr_types.h>
 
 /*!
- * \brief fixed point sine and cosine and friends.
+ * \brief fixed point sine and cosine and friend GR_CORE_APIs.
  * \ingroup misc
  *
  *   fixed pt	radians
@@ -35,7 +36,7 @@
  *  2**31-1        pi - epsilon
  *
  */
-class gr_fxpt
+class GR_CORE_API gr_fxpt
 {
   static const int WORDBITS = 32;
   static const int NBITS = 10;
diff --git a/gnuradio-core/src/lib/general/gr_fxpt_nco.h b/gnuradio-core/src/lib/general/gr_fxpt_nco.h
index ca0d54f024..5597efb4f7 100644
--- a/gnuradio-core/src/lib/general/gr_fxpt_nco.h
+++ b/gnuradio-core/src/lib/general/gr_fxpt_nco.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_FXPT_NCO_H
 #define INCLUDED_GR_FXPT_NCO_H
 
+#include <gr_core_api.h>
 #include <gr_fxpt.h>
 #include <gr_complex.h>
 
@@ -29,7 +30,7 @@
  * \brief Numerically Controlled Oscillator (NCO)
  * \ingroup misc
  */
-class gr_fxpt_nco {
+class GR_CORE_API gr_fxpt_nco {
   gr_uint32	d_phase;
   gr_int32	d_phase_inc;
 
diff --git a/gnuradio-core/src/lib/general/gr_fxpt_vco.h b/gnuradio-core/src/lib/general/gr_fxpt_vco.h
index 1ff968b79a..a77a313110 100644
--- a/gnuradio-core/src/lib/general/gr_fxpt_vco.h
+++ b/gnuradio-core/src/lib/general/gr_fxpt_vco.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_FXPT_VCO_H
 #define INCLUDED_GR_FXPT_VCO_H
 
+#include <gr_core_api.h>
 #include <gr_fxpt.h>
 #include <gr_complex.h>
 
@@ -29,7 +30,7 @@
  * \brief Voltage Controlled Oscillator (VCO)
  * \ingroup misc
  */
-class gr_fxpt_vco {
+class GR_CORE_API gr_fxpt_vco {
   gr_int32	d_phase;
 
 public:
diff --git a/gnuradio-core/src/lib/general/gr_glfsr_source_b.h b/gnuradio-core/src/lib/general/gr_glfsr_source_b.h
index cff8df11bf..bd66912ed8 100644
--- a/gnuradio-core/src/lib/general/gr_glfsr_source_b.h
+++ b/gnuradio-core/src/lib/general/gr_glfsr_source_b.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_GLFSR_SOURCE_B_H
 #define INCLUDED_GR_GLFSR_SOURCE_B_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gri_glfsr;
@@ -30,16 +31,16 @@ class gri_glfsr;
 class gr_glfsr_source_b;
 typedef boost::shared_ptr<gr_glfsr_source_b> gr_glfsr_source_b_sptr;
 
-gr_glfsr_source_b_sptr gr_make_glfsr_source_b(int degree, bool repeat=true, int mask=0, int seed=1);
+GR_CORE_API gr_glfsr_source_b_sptr gr_make_glfsr_source_b(int degree, bool repeat=true, int mask=0, int seed=1);
 
 /*!
  * \brief Galois LFSR pseudo-random source
  * \ingroup source_blk
  */
-class gr_glfsr_source_b : public gr_sync_block 
+class GR_CORE_API gr_glfsr_source_b : public gr_sync_block
 {
  private:
-  friend gr_glfsr_source_b_sptr
+  friend GR_CORE_API gr_glfsr_source_b_sptr
   gr_make_glfsr_source_b(int degree, bool repeat, int mask, int seed);
   
   gri_glfsr *d_glfsr;
diff --git a/gnuradio-core/src/lib/general/gr_glfsr_source_f.h b/gnuradio-core/src/lib/general/gr_glfsr_source_f.h
index 007970806f..2dd09c5acf 100644
--- a/gnuradio-core/src/lib/general/gr_glfsr_source_f.h
+++ b/gnuradio-core/src/lib/general/gr_glfsr_source_f.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_GLFSR_SOURCE_F_H
 #define INCLUDED_GR_GLFSR_SOURCE_F_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gri_glfsr;
@@ -30,16 +31,16 @@ class gri_glfsr;
 class gr_glfsr_source_f;
 typedef boost::shared_ptr<gr_glfsr_source_f> gr_glfsr_source_f_sptr;
 
-gr_glfsr_source_f_sptr gr_make_glfsr_source_f(int degree, bool repeat=true, int mask=0, int seed=1);
+GR_CORE_API gr_glfsr_source_f_sptr gr_make_glfsr_source_f(int degree, bool repeat=true, int mask=0, int seed=1);
 
 /*!
  * \brief Galois LFSR pseudo-random source generating float outputs -1.0 - 1.0
  * \ingroup source_blk
  */
-class gr_glfsr_source_f : public gr_sync_block 
+class GR_CORE_API gr_glfsr_source_f : public gr_sync_block
 {
  private:
-  friend gr_glfsr_source_f_sptr
+  friend GR_CORE_API gr_glfsr_source_f_sptr
   gr_make_glfsr_source_f(int degree, bool repeat, int mask, int seed);
   
   gri_glfsr *d_glfsr;
diff --git a/gnuradio-core/src/lib/general/gr_head.h b/gnuradio-core/src/lib/general/gr_head.h
index f7eee10648..f66d433089 100644
--- a/gnuradio-core/src/lib/general/gr_head.h
+++ b/gnuradio-core/src/lib/general/gr_head.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_HEAD_H
 #define INCLUDED_GR_HEAD_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <stddef.h>			// size_t
 
@@ -36,9 +37,9 @@ typedef boost::shared_ptr<gr_head> gr_head_sptr;
  * Useful for building test cases
  */
 
-class gr_head : public gr_sync_block
+class GR_CORE_API gr_head : public gr_sync_block
 {
-  friend gr_head_sptr gr_make_head (size_t sizeof_stream_item, unsigned long long nitems);
+  friend GR_CORE_API gr_head_sptr gr_make_head (size_t sizeof_stream_item, unsigned long long nitems);
   gr_head (size_t sizeof_stream_item, unsigned long long nitems);
 
   unsigned long long	d_nitems;
@@ -52,7 +53,7 @@ class gr_head : public gr_sync_block
   void reset() { d_ncopied_items = 0; }
 };
 
-gr_head_sptr
+GR_CORE_API gr_head_sptr
 gr_make_head (size_t sizeof_stream_item, unsigned long long nitems);
 
 
diff --git a/gnuradio-core/src/lib/general/gr_int_to_float.h b/gnuradio-core/src/lib/general/gr_int_to_float.h
index cf1223be52..dac7be9c4d 100644
--- a/gnuradio-core/src/lib/general/gr_int_to_float.h
+++ b/gnuradio-core/src/lib/general/gr_int_to_float.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_INT_TO_FLOAT_H
 #define INCLUDED_GR_INT_TO_FLOAT_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_int_to_float;
 typedef boost::shared_ptr<gr_int_to_float> gr_int_to_float_sptr;
 
-gr_int_to_float_sptr
+GR_CORE_API gr_int_to_float_sptr
 gr_make_int_to_float ();
 
 /*!
@@ -36,9 +37,9 @@ gr_make_int_to_float ();
  * \ingroup converter_blk
  */
 
-class gr_int_to_float : public gr_sync_block
+class GR_CORE_API gr_int_to_float : public gr_sync_block
 {
-  friend gr_int_to_float_sptr gr_make_int_to_float ();
+  friend GR_CORE_API gr_int_to_float_sptr gr_make_int_to_float ();
   gr_int_to_float ();
 
  public:
diff --git a/gnuradio-core/src/lib/general/gr_interleave.h b/gnuradio-core/src/lib/general/gr_interleave.h
index faffdd757e..ef7bce07a1 100644
--- a/gnuradio-core/src/lib/general/gr_interleave.h
+++ b/gnuradio-core/src/lib/general/gr_interleave.h
@@ -23,20 +23,21 @@
 #ifndef INCLUDED_GR_INTERLEAVE_H
 #define INCLUDED_GR_INTERLEAVE_H
 
+#include <gr_core_api.h>
 #include <gr_sync_interpolator.h>
 
 class gr_interleave;
 typedef boost::shared_ptr<gr_interleave> gr_interleave_sptr;
 
-gr_interleave_sptr gr_make_interleave (size_t itemsize);
+GR_CORE_API gr_interleave_sptr gr_make_interleave (size_t itemsize);
 
 /*!
  * \brief interleave N inputs to a single output
  * \ingroup slicedice_blk
  */
-class gr_interleave : public gr_sync_interpolator
+class GR_CORE_API gr_interleave : public gr_sync_interpolator
 {
-  friend gr_interleave_sptr gr_make_interleave (size_t itemsize);
+  friend GR_CORE_API gr_interleave_sptr gr_make_interleave (size_t itemsize);
 
   size_t	d_itemsize;
 
diff --git a/gnuradio-core/src/lib/general/gr_interleaved_short_to_complex.h b/gnuradio-core/src/lib/general/gr_interleaved_short_to_complex.h
index c79a9370f7..40f1636bd9 100644
--- a/gnuradio-core/src/lib/general/gr_interleaved_short_to_complex.h
+++ b/gnuradio-core/src/lib/general/gr_interleaved_short_to_complex.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_INTERLEAVED_SHORT_TO_COMPLEX_H
 #define INCLUDED_GR_INTERLEAVED_SHORT_TO_COMPLEX_H
 
+#include <gr_core_api.h>
 #include <gr_sync_decimator.h>
 
 class gr_interleaved_short_to_complex;
 typedef boost::shared_ptr<gr_interleaved_short_to_complex>
   gr_interleaved_short_to_complex_sptr;
 
-gr_interleaved_short_to_complex_sptr
+GR_CORE_API gr_interleaved_short_to_complex_sptr
 gr_make_interleaved_short_to_complex ();
 
 /*!
@@ -37,9 +38,9 @@ gr_make_interleaved_short_to_complex ();
  * \ingroup converter_blk
  */
 
-class gr_interleaved_short_to_complex : public gr_sync_decimator
+class GR_CORE_API gr_interleaved_short_to_complex : public gr_sync_decimator
 {
-  friend gr_interleaved_short_to_complex_sptr gr_make_interleaved_short_to_complex ();
+  friend GR_CORE_API gr_interleaved_short_to_complex_sptr gr_make_interleaved_short_to_complex ();
   gr_interleaved_short_to_complex ();
 
  public:
diff --git a/gnuradio-core/src/lib/general/gr_iqcomp_cc.h b/gnuradio-core/src/lib/general/gr_iqcomp_cc.h
index f4c6cf8ea7..c01e2a6ba1 100644
--- a/gnuradio-core/src/lib/general/gr_iqcomp_cc.h
+++ b/gnuradio-core/src/lib/general/gr_iqcomp_cc.h
@@ -24,20 +24,21 @@
 #ifndef INCLUDED_GR_IQCOMP_CC_H
 #define INCLUDED_GR_IQCOMP_CC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_iqcomp_cc;
 typedef boost::shared_ptr<gr_iqcomp_cc> gr_iqcomp_cc_sptr;
 
-gr_iqcomp_cc_sptr gr_make_iqcomp_cc (float mu);
+GR_CORE_API gr_iqcomp_cc_sptr gr_make_iqcomp_cc (float mu);
 
 /*!
  * \brief 
  * \ingroup misc_blk
  */
-class gr_iqcomp_cc : public gr_sync_block
+class GR_CORE_API gr_iqcomp_cc : public gr_sync_block
 {
-  friend gr_iqcomp_cc_sptr gr_make_iqcomp_cc (float mu);
+  friend GR_CORE_API gr_iqcomp_cc_sptr gr_make_iqcomp_cc (float mu);
 
   float	d_mu, d_wi, d_wq;
   gr_iqcomp_cc (float mu);
diff --git a/gnuradio-core/src/lib/general/gr_keep_one_in_n.h b/gnuradio-core/src/lib/general/gr_keep_one_in_n.h
index 337827446a..f12a7a0f1a 100644
--- a/gnuradio-core/src/lib/general/gr_keep_one_in_n.h
+++ b/gnuradio-core/src/lib/general/gr_keep_one_in_n.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_KEEP_ONE_IN_N_H
 #define INCLUDED_GR_KEEP_ONE_IN_N_H
 
+#include <gr_core_api.h>
 #include <gr_sync_decimator.h>
 
 class gr_keep_one_in_n;
 typedef boost::shared_ptr<gr_keep_one_in_n> gr_keep_one_in_n_sptr;
 
-gr_keep_one_in_n_sptr 
+GR_CORE_API gr_keep_one_in_n_sptr 
 gr_make_keep_one_in_n (size_t item_size, int n);
 
 
@@ -36,9 +37,9 @@ gr_make_keep_one_in_n (size_t item_size, int n);
  * \brief decimate a stream, keeping one item out of every n.
  * \ingroup slicedice_blk
  */
-class gr_keep_one_in_n : public gr_block
+class GR_CORE_API gr_keep_one_in_n : public gr_block
 {
-  friend gr_keep_one_in_n_sptr
+  friend GR_CORE_API gr_keep_one_in_n_sptr
   gr_make_keep_one_in_n (size_t item_size, int n);
 
   int	d_n;
diff --git a/gnuradio-core/src/lib/general/gr_kludge_copy.h b/gnuradio-core/src/lib/general/gr_kludge_copy.h
index 90fd047dfe..5c1e461a81 100644
--- a/gnuradio-core/src/lib/general/gr_kludge_copy.h
+++ b/gnuradio-core/src/lib/general/gr_kludge_copy.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_KLUDGE_COPY_H
 #define INCLUDED_GR_KLUDGE_COPY_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_kludge_copy;
 typedef boost::shared_ptr<gr_kludge_copy> gr_kludge_copy_sptr;
 
-gr_kludge_copy_sptr gr_make_kludge_copy(size_t itemsize);
+GR_CORE_API gr_kludge_copy_sptr gr_make_kludge_copy(size_t itemsize);
 
 /*!
  * \brief output[i] = input[i]
@@ -36,11 +37,11 @@ gr_kludge_copy_sptr gr_make_kludge_copy(size_t itemsize);
  *
  * This is a short term kludge to work around a problem with the hierarchical block impl.
  */
-class gr_kludge_copy : public gr_sync_block
+class GR_CORE_API gr_kludge_copy : public gr_sync_block
 {
   size_t		d_itemsize;
 
-  friend gr_kludge_copy_sptr gr_make_kludge_copy(size_t itemsize);
+  friend GR_CORE_API gr_kludge_copy_sptr gr_make_kludge_copy(size_t itemsize);
   gr_kludge_copy(size_t itemsize);
 
  public:
diff --git a/gnuradio-core/src/lib/general/gr_lfsr_32k_source_s.h b/gnuradio-core/src/lib/general/gr_lfsr_32k_source_s.h
index f8497e4cbd..aa7ad7b1f9 100644
--- a/gnuradio-core/src/lib/general/gr_lfsr_32k_source_s.h
+++ b/gnuradio-core/src/lib/general/gr_lfsr_32k_source_s.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_LFSR_32K_SOURCE_S_H
 #define INCLUDED_GR_LFSR_32K_SOURCE_S_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gri_lfsr_32k.h>
 
 class gr_lfsr_32k_source_s;
 typedef boost::shared_ptr<gr_lfsr_32k_source_s> gr_lfsr_32k_source_s_sptr;
 
-gr_lfsr_32k_source_s_sptr gr_make_lfsr_32k_source_s ();
+GR_CORE_API gr_lfsr_32k_source_s_sptr gr_make_lfsr_32k_source_s ();
 
 /*!
  * \brief LFSR pseudo-random source with period of 2^15 bits (2^11 shorts)
@@ -38,9 +39,9 @@ gr_lfsr_32k_source_s_sptr gr_make_lfsr_32k_source_s ();
  * This source is typically used along with gr_check_lfsr_32k_s to test
  * the USRP using its digital loopback mode.
  */
-class gr_lfsr_32k_source_s : public gr_sync_block 
+class GR_CORE_API gr_lfsr_32k_source_s : public gr_sync_block
 {
-  friend gr_lfsr_32k_source_s_sptr gr_make_lfsr_32k_source_s ();
+  friend GR_CORE_API gr_lfsr_32k_source_s_sptr gr_make_lfsr_32k_source_s ();
 
   
   static const int BUFSIZE = 2048 - 1;	// ensure pattern isn't packet aligned
diff --git a/gnuradio-core/src/lib/general/gr_lms_dfe_cc.h b/gnuradio-core/src/lib/general/gr_lms_dfe_cc.h
index 7b3a2c84eb..335b1883c4 100644
--- a/gnuradio-core/src/lib/general/gr_lms_dfe_cc.h
+++ b/gnuradio-core/src/lib/general/gr_lms_dfe_cc.h
@@ -23,21 +23,22 @@
 #ifndef INCLUDED_GR_LMS_DFE_CC_H
 #define INCLUDED_GR_LMS_DFE_CC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_lms_dfe_cc;
 typedef boost::shared_ptr<gr_lms_dfe_cc> gr_lms_dfe_cc_sptr;
 
-gr_lms_dfe_cc_sptr gr_make_lms_dfe_cc (float lambda_ff, float lambda_fb,
+GR_CORE_API gr_lms_dfe_cc_sptr gr_make_lms_dfe_cc (float lambda_ff, float lambda_fb,
 				       unsigned int num_fftaps, unsigned int num_fbtaps);
 
 /*!
  * \brief Least-Mean-Square Decision Feedback Equalizer (complex in/out)
  * \ingroup eq_blk
  */
-class gr_lms_dfe_cc : public gr_sync_block
+class GR_CORE_API gr_lms_dfe_cc : public gr_sync_block
 {
-  friend gr_lms_dfe_cc_sptr gr_make_lms_dfe_cc (float lambda_ff, float lambda_fb,
+  friend GR_CORE_API gr_lms_dfe_cc_sptr gr_make_lms_dfe_cc (float lambda_ff, float lambda_fb,
 						unsigned int num_fftaps, unsigned int num_fbtaps);
   
   float	d_lambda_ff;
diff --git a/gnuradio-core/src/lib/general/gr_lms_dfe_ff.h b/gnuradio-core/src/lib/general/gr_lms_dfe_ff.h
index dd610c4707..ed2aa9844d 100644
--- a/gnuradio-core/src/lib/general/gr_lms_dfe_ff.h
+++ b/gnuradio-core/src/lib/general/gr_lms_dfe_ff.h
@@ -23,21 +23,22 @@
 #ifndef INCLUDED_GR_LMS_DFE_FF_H
 #define INCLUDED_GR_LMS_DFE_FF_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_lms_dfe_ff;
 typedef boost::shared_ptr<gr_lms_dfe_ff> gr_lms_dfe_ff_sptr;
 
-gr_lms_dfe_ff_sptr gr_make_lms_dfe_ff (float lambda_ff, float lambda_fb,
+GR_CORE_API gr_lms_dfe_ff_sptr gr_make_lms_dfe_ff (float lambda_ff, float lambda_fb,
 				       unsigned int num_fftaps, unsigned int num_fbtaps);
 
 /*!
  * \brief Least-Mean-Square Decision Feedback Equalizer (float in/out)
  * \ingroup eq_blk
  */
-class gr_lms_dfe_ff : public gr_sync_block
+class GR_CORE_API gr_lms_dfe_ff : public gr_sync_block
 {
-  friend gr_lms_dfe_ff_sptr gr_make_lms_dfe_ff (float lambda_ff, float lambda_fb,
+  friend GR_CORE_API gr_lms_dfe_ff_sptr gr_make_lms_dfe_ff (float lambda_ff, float lambda_fb,
 						unsigned int num_fftaps, unsigned int num_fbtaps);
   
   float	d_lambda_ff;
diff --git a/gnuradio-core/src/lib/general/gr_log2_const.h b/gnuradio-core/src/lib/general/gr_log2_const.h
index 4ea4209203..8e4a0860bd 100644
--- a/gnuradio-core/src/lib/general/gr_log2_const.h
+++ b/gnuradio-core/src/lib/general/gr_log2_const.h
@@ -27,6 +27,7 @@
 #ifndef INCLUDED_GR_LOG2_CONST_H
 #define INCLUDED_GR_LOG2_CONST_H
 
+#include <gr_core_api.h>
 #include <assert.h>
 
 template<unsigned int k> static inline int gr_log2_const() { assert(0); return 0; }
diff --git a/gnuradio-core/src/lib/general/gr_map_bb.h b/gnuradio-core/src/lib/general/gr_map_bb.h
index 4986ab181a..0820c6a167 100644
--- a/gnuradio-core/src/lib/general/gr_map_bb.h
+++ b/gnuradio-core/src/lib/general/gr_map_bb.h
@@ -22,21 +22,22 @@
 #ifndef INCLUDED_GR_MAP_BB_H
 #define INCLUDED_GR_MAP_BB_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_map_bb;
 typedef boost::shared_ptr<gr_map_bb> gr_map_bb_sptr;
 
-gr_map_bb_sptr gr_make_map_bb(const std::vector<int> &map);
+GR_CORE_API gr_map_bb_sptr gr_make_map_bb(const std::vector<int> &map);
 
 /*!
  * \brief output[i] = map[input[i]]
  * \ingroup coding_blk
  */
 
-class gr_map_bb : public gr_sync_block
+class GR_CORE_API gr_map_bb : public gr_sync_block
 {
-  friend gr_map_bb_sptr gr_make_map_bb(const std::vector<int> &map);
+  friend GR_CORE_API gr_map_bb_sptr gr_make_map_bb(const std::vector<int> &map);
 
   unsigned char d_map[0x100];
 
diff --git a/gnuradio-core/src/lib/general/gr_math.h b/gnuradio-core/src/lib/general/gr_math.h
index f5935c1da7..9c61942cdf 100644
--- a/gnuradio-core/src/lib/general/gr_math.h
+++ b/gnuradio-core/src/lib/general/gr_math.h
@@ -27,6 +27,7 @@
 #ifndef _GR_MATH_H_
 #define _GR_MATH_H_
 
+#include <gr_core_api.h>
 #include <gr_complex.h>
 
 static inline bool
@@ -51,7 +52,7 @@ gr_is_power_of_2(long x)
  * to zero. This routine calculates the arc tangent with an average
  * error of +/- 0.045 degrees.
  */
-float gr_fast_atan2f(float y, float x);
+GR_CORE_API float gr_fast_atan2f(float y, float x);
 
 static inline float gr_fast_atan2f(gr_complex z) 
 { 
diff --git a/gnuradio-core/src/lib/general/gr_misc.h b/gnuradio-core/src/lib/general/gr_misc.h
index 55cc7eda65..78f7e18ac4 100644
--- a/gnuradio-core/src/lib/general/gr_misc.h
+++ b/gnuradio-core/src/lib/general/gr_misc.h
@@ -23,16 +23,17 @@
 #ifndef INCLUDED_GR_MISC_H
 #define INCLUDED_GR_MISC_H
 
+#include <gr_core_api.h>
 #include <gr_types.h>
 
 unsigned int 
 gr_rounduppow2(unsigned int n);
 
 // FIXME should be template
-void gr_zero_vector(std::vector<float> &v);
-void gr_zero_vector(std::vector<double> &v);
-void gr_zero_vector(std::vector<int> &v);
-void gr_zero_vector(std::vector<gr_complex> &v);
+GR_CORE_API void gr_zero_vector(std::vector<float> &v);
+GR_CORE_API void gr_zero_vector(std::vector<double> &v);
+GR_CORE_API void gr_zero_vector(std::vector<int> &v);
+GR_CORE_API void gr_zero_vector(std::vector<gr_complex> &v);
 
 
 #endif /* INCLUDED_GR_MISC_H */
diff --git a/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.h b/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.h
index f17b68aa0d..1a3f0792a4 100644
--- a/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.h
+++ b/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.h
@@ -24,6 +24,7 @@
 #define	INCLUDED_GR_MPSK_RECEIVER_CC_H
 
 #include <gruel/attributes.h>
+#include <gr_core_api.h>
 #include <gr_block.h>
 #include <gr_complex.h>
 #include <fstream>
@@ -34,7 +35,7 @@ class gr_mpsk_receiver_cc;
 typedef boost::shared_ptr<gr_mpsk_receiver_cc> gr_mpsk_receiver_cc_sptr;
 
 // public constructor
-gr_mpsk_receiver_cc_sptr 
+GR_CORE_API gr_mpsk_receiver_cc_sptr 
 gr_make_mpsk_receiver_cc (unsigned int M, float theta, 
 			  float alpha, float beta,
 			  float fmin, float fmax,
@@ -70,7 +71,7 @@ gr_make_mpsk_receiver_cc (unsigned int M, float theta,
  *
  */
 
-class gr_mpsk_receiver_cc : public gr_block
+class GR_CORE_API gr_mpsk_receiver_cc : public gr_block
 {
  public:
   ~gr_mpsk_receiver_cc ();
@@ -305,7 +306,7 @@ protected:
   //! index to delay line
   unsigned int d_dl_idx;
 
-  friend gr_mpsk_receiver_cc_sptr
+  friend GR_CORE_API gr_mpsk_receiver_cc_sptr
   gr_make_mpsk_receiver_cc (unsigned int M, float theta,
 			    float alpha, float beta,
 			    float fmin, float fmax,
diff --git a/gnuradio-core/src/lib/general/gr_nlog10_ff.h b/gnuradio-core/src/lib/general/gr_nlog10_ff.h
index 1cb50f3ca1..cea56f87e1 100644
--- a/gnuradio-core/src/lib/general/gr_nlog10_ff.h
+++ b/gnuradio-core/src/lib/general/gr_nlog10_ff.h
@@ -22,20 +22,21 @@
 #ifndef INCLUDED_GR_NLOG10_FF_H
 #define INCLUDED_GR_NLOG10_FF_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_nlog10_ff;
 typedef boost::shared_ptr<gr_nlog10_ff> gr_nlog10_ff_sptr;
 
-gr_nlog10_ff_sptr gr_make_nlog10_ff (float n=1.0, unsigned vlen=1, float k=0);
+GR_CORE_API gr_nlog10_ff_sptr gr_make_nlog10_ff (float n=1.0, unsigned vlen=1, float k=0);
 
 /*!
  * \brief output = n*log10(input) + k
  * \ingroup math_blk
  */
-class gr_nlog10_ff : public gr_sync_block
+class GR_CORE_API gr_nlog10_ff : public gr_sync_block
 {
-  friend gr_nlog10_ff_sptr gr_make_nlog10_ff (float n, unsigned vlen, float k);
+  friend GR_CORE_API gr_nlog10_ff_sptr gr_make_nlog10_ff (float n, unsigned vlen, float k);
 
   unsigned int		d_vlen;
   float			d_n;
diff --git a/gnuradio-core/src/lib/general/gr_nop.h b/gnuradio-core/src/lib/general/gr_nop.h
index 354c2f9fc9..b8398befc6 100644
--- a/gnuradio-core/src/lib/general/gr_nop.h
+++ b/gnuradio-core/src/lib/general/gr_nop.h
@@ -23,22 +23,23 @@
 #ifndef INCLUDED_GR_NOP_H
 #define INCLUDED_GR_NOP_H
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 #include <stddef.h>			// size_t
 
 class gr_nop;
 typedef boost::shared_ptr<gr_nop> gr_nop_sptr;
 
-gr_nop_sptr
+GR_CORE_API gr_nop_sptr
 gr_make_nop (size_t sizeof_stream_item);
 
 /*!
  * \brief Does nothing.  Used for testing only.
  * \ingroup misc_blk
  */
-class gr_nop : public gr_block
+class GR_CORE_API gr_nop : public gr_block
 {
-  friend gr_nop_sptr gr_make_nop (size_t sizeof_stream_item);
+  friend GR_CORE_API gr_nop_sptr gr_make_nop (size_t sizeof_stream_item);
   gr_nop (size_t sizeof_stream_item);
 
 protected:
diff --git a/gnuradio-core/src/lib/general/gr_null_sink.h b/gnuradio-core/src/lib/general/gr_null_sink.h
index 6d00382a5e..c6c4f36fbd 100644
--- a/gnuradio-core/src/lib/general/gr_null_sink.h
+++ b/gnuradio-core/src/lib/general/gr_null_sink.h
@@ -23,23 +23,23 @@
 #ifndef INCLUDED_GR_NULL_SINK_H
 #define INCLUDED_GR_NULL_SINK_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <stddef.h>			// size_t
 
 class gr_null_sink;
 typedef boost::shared_ptr<gr_null_sink> gr_null_sink_sptr;
 
-gr_null_sink_sptr
+GR_CORE_API gr_null_sink_sptr
 gr_make_null_sink (size_t sizeof_stream_item);
 
-
 /*!
  * \brief Bit bucket
  * \ingroup sink_blk
  */
-class gr_null_sink : public gr_sync_block
+class GR_CORE_API gr_null_sink : public gr_sync_block
 {
-  friend gr_null_sink_sptr gr_make_null_sink (size_t sizeof_stream_item);
+  friend GR_CORE_API gr_null_sink_sptr gr_make_null_sink (size_t sizeof_stream_item);
   gr_null_sink (size_t sizeof_stream_item);
 
  public:
diff --git a/gnuradio-core/src/lib/general/gr_null_source.h b/gnuradio-core/src/lib/general/gr_null_source.h
index b1a46a195b..33687fbaa5 100644
--- a/gnuradio-core/src/lib/general/gr_null_source.h
+++ b/gnuradio-core/src/lib/general/gr_null_source.h
@@ -23,21 +23,22 @@
 #ifndef INCLUDED_GR_NULL_SOURCE_H
 #define INCLUDED_GR_NULL_SOURCE_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_null_source;
 typedef boost::shared_ptr<gr_null_source> gr_null_source_sptr;
 
-gr_null_source_sptr
+GR_CORE_API gr_null_source_sptr
 gr_make_null_source (size_t sizeof_stream_item);
 
 /*!
  * \brief A source of zeros.
  * \ingroup source_blk
  */
-class gr_null_source : public gr_sync_block
+class GR_CORE_API gr_null_source : public gr_sync_block
 {
-  friend gr_null_source_sptr gr_make_null_source (size_t sizeof_stream_item);
+  friend GR_CORE_API gr_null_source_sptr gr_make_null_source (size_t sizeof_stream_item);
 
   gr_null_source (size_t sizeof_stream_item);
 
diff --git a/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.h b/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.h
index 12ae6a8f65..6d532d50f7 100644
--- a/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.h
+++ b/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.h
@@ -24,13 +24,14 @@
 #define INCLUDED_GR_OFDM_BPSK_DEMAPPER_H
 
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 #include <vector>
 
 class gr_ofdm_bpsk_demapper;
 typedef boost::shared_ptr<gr_ofdm_bpsk_demapper> gr_ofdm_bpsk_demapper_sptr;
 
-gr_ofdm_bpsk_demapper_sptr 
+GR_CORE_API gr_ofdm_bpsk_demapper_sptr 
 gr_make_ofdm_bpsk_demapper (unsigned int occupied_carriers);
 
 
@@ -39,9 +40,9 @@ gr_make_ofdm_bpsk_demapper (unsigned int occupied_carriers);
  * and demodulate to a stream of bits. Simple BPSK version.
  * \ingroup ofdm_blk
  */
-class gr_ofdm_bpsk_demapper : public gr_block
+class GR_CORE_API gr_ofdm_bpsk_demapper : public gr_block
 {
-  friend gr_ofdm_bpsk_demapper_sptr
+  friend GR_CORE_API gr_ofdm_bpsk_demapper_sptr
     gr_make_ofdm_bpsk_demapper (unsigned int occupied_carriers);
   
  protected:
diff --git a/gnuradio-core/src/lib/general/gr_ofdm_cyclic_prefixer.h b/gnuradio-core/src/lib/general/gr_ofdm_cyclic_prefixer.h
index eab91cd11c..1ed68aa58f 100644
--- a/gnuradio-core/src/lib/general/gr_ofdm_cyclic_prefixer.h
+++ b/gnuradio-core/src/lib/general/gr_ofdm_cyclic_prefixer.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_OFDM_CYCLIC_PREFIXER_H
 #define INCLUDED_GR_OFDM_CYCLIC_PREFIXER_H
 
+#include <gr_core_api.h>
 #include <gr_sync_interpolator.h>
 #include <stdio.h>
 
 class gr_ofdm_cyclic_prefixer;
 typedef boost::shared_ptr<gr_ofdm_cyclic_prefixer> gr_ofdm_cyclic_prefixer_sptr;
 
-gr_ofdm_cyclic_prefixer_sptr 
+GR_CORE_API gr_ofdm_cyclic_prefixer_sptr 
 gr_make_ofdm_cyclic_prefixer (size_t input_size, size_t output_size);
 
 
@@ -38,9 +39,9 @@ gr_make_ofdm_cyclic_prefixer (size_t input_size, size_t output_size);
  * symbol(vector) and converts vector to a stream output_size long.
  * \ingroup ofdm_blk
  */
-class gr_ofdm_cyclic_prefixer : public gr_sync_interpolator
+class GR_CORE_API gr_ofdm_cyclic_prefixer : public gr_sync_interpolator
 {
-  friend gr_ofdm_cyclic_prefixer_sptr
+  friend GR_CORE_API gr_ofdm_cyclic_prefixer_sptr
     gr_make_ofdm_cyclic_prefixer (size_t input_size, size_t output_size);
 
  protected:
diff --git a/gnuradio-core/src/lib/general/gr_ofdm_demapper_vcb.h b/gnuradio-core/src/lib/general/gr_ofdm_demapper_vcb.h
index 979e1996b9..d12e007df7 100644
--- a/gnuradio-core/src/lib/general/gr_ofdm_demapper_vcb.h
+++ b/gnuradio-core/src/lib/general/gr_ofdm_demapper_vcb.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_OFDM_DEMAPPER_VCB_H
 #define INCLUDED_GR_OFDM_DEMAPPER_VCB_H
 
+#include <gr_core_api.h>
 #include <gr_sync_decimator.h>
 
 class gr_ofdm_demapper_vcb;
 typedef boost::shared_ptr<gr_ofdm_demapper_vcb> gr_ofdm_demapper_vcb_sptr;
 
-gr_ofdm_demapper_vcb_sptr 
+GR_CORE_API gr_ofdm_demapper_vcb_sptr 
 gr_make_ofdm_demapper_vcb (unsigned int bits_per_symbol, unsigned int vlen);
 
 
@@ -39,9 +40,9 @@ gr_make_ofdm_demapper_vcb (unsigned int bits_per_symbol, unsigned int vlen);
  * \ingroup demodulation_blk
  * \ingroup ofdm_blk
  */
-class gr_ofdm_demapper_vcb : public gr_sync_decimator
+class GR_CORE_API gr_ofdm_demapper_vcb : public gr_sync_decimator
 {
-  friend gr_ofdm_demapper_vcb_sptr
+  friend GR_CORE_API gr_ofdm_demapper_vcb_sptr
   gr_make_ofdm_demapper_vcb (unsigned int bits_per_symbol, unsigned int vlen);
 
 protected:
diff --git a/gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.h b/gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.h
index 5db8dbb7f5..63c1af0866 100644
--- a/gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.h
+++ b/gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.h
@@ -24,13 +24,14 @@
 #define INCLUDED_GR_OFDM_FRAME_ACQUISITION_H
 
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 #include <vector>
 
 class gr_ofdm_frame_acquisition;
 typedef boost::shared_ptr<gr_ofdm_frame_acquisition> gr_ofdm_frame_acquisition_sptr;
 
-gr_ofdm_frame_acquisition_sptr 
+GR_CORE_API gr_ofdm_frame_acquisition_sptr 
 gr_make_ofdm_frame_acquisition (unsigned int occupied_carriers, unsigned int fft_length,
 				unsigned int cplen,
 				const std::vector<gr_complex> &known_symbol, 
@@ -54,7 +55,7 @@ gr_make_ofdm_frame_acquisition (unsigned int occupied_carriers, unsigned int fft
  * distortion caused by the channel.
  */
 
-class gr_ofdm_frame_acquisition : public gr_block
+class GR_CORE_API gr_ofdm_frame_acquisition : public gr_block
 {
   /*! 
    * \brief Build an OFDM correlator and equalizer.
@@ -65,7 +66,7 @@ class gr_ofdm_frame_acquisition : public gr_block
    *                            start of a frame (usually a BPSK PN sequence)
    * \param max_fft_shift_len   Set's the maximum distance you can look between bins for correlation
    */
-  friend gr_ofdm_frame_acquisition_sptr
+  friend GR_CORE_API gr_ofdm_frame_acquisition_sptr
   gr_make_ofdm_frame_acquisition (unsigned int occupied_carriers, unsigned int fft_length,
 				  unsigned int cplen,
 				  const std::vector<gr_complex> &known_symbol, 
diff --git a/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h b/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
index c419b86735..d3c1d761d2 100644
--- a/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
+++ b/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_OFDM_FRAME_SINK_H
 #define INCLUDED_GR_OFDM_FRAME_SINK_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_msg_queue.h>
 
 class gr_ofdm_frame_sink;
 typedef boost::shared_ptr<gr_ofdm_frame_sink> gr_ofdm_frame_sink_sptr;
 
-gr_ofdm_frame_sink_sptr 
+GR_CORE_API gr_ofdm_frame_sink_sptr 
 gr_make_ofdm_frame_sink (const std::vector<gr_complex> &sym_position, 
 			 const std::vector<unsigned char> &sym_value_out,
 			 gr_msg_queue_sptr target_queue, unsigned int occupied_tones,
@@ -45,9 +46,9 @@ gr_make_ofdm_frame_sink (const std::vector<gr_complex> &sym_position,
  * we want to be able to pass in a reference to an object to do the demapping and slicing
  * for a given modulation type.
  */
-class gr_ofdm_frame_sink : public gr_sync_block
+class GR_CORE_API gr_ofdm_frame_sink : public gr_sync_block
 {
-  friend gr_ofdm_frame_sink_sptr 
+  friend GR_CORE_API gr_ofdm_frame_sink_sptr 
   gr_make_ofdm_frame_sink (const std::vector<gr_complex> &sym_position, 
 			   const std::vector<unsigned char> &sym_value_out,
 			   gr_msg_queue_sptr target_queue, unsigned int occupied_tones,
diff --git a/gnuradio-core/src/lib/general/gr_ofdm_frame_sink2.h b/gnuradio-core/src/lib/general/gr_ofdm_frame_sink2.h
index de8c6a37e0..9595303b1c 100644
--- a/gnuradio-core/src/lib/general/gr_ofdm_frame_sink2.h
+++ b/gnuradio-core/src/lib/general/gr_ofdm_frame_sink2.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_OFDM_FRAME_SINK2_H
 #define INCLUDED_GR_OFDM_FRAME_SINK2_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_msg_queue.h>
 #include <gr_constellation.h>
@@ -30,7 +31,7 @@
 class gr_ofdm_frame_sink2;
 typedef boost::shared_ptr<gr_ofdm_frame_sink2> gr_ofdm_frame_sink2_sptr;
 
-gr_ofdm_frame_sink2_sptr 
+GR_CORE_API gr_ofdm_frame_sink2_sptr 
 gr_make_ofdm_frame_sink2 (gr_constellation_sptr constell,
 			 gr_msg_queue_sptr target_queue, unsigned int occupied_tones,
 			 float phase_gain=0.25, float freq_gain=0.25*0.25/4.0);
@@ -45,9 +46,9 @@ gr_make_ofdm_frame_sink2 (gr_constellation_sptr constell,
  * we want to be able to pass in a reference to an object to do the demapping and slicing
  * for a given modulation type.
  */
-class gr_ofdm_frame_sink2 : public gr_sync_block
+class GR_CORE_API gr_ofdm_frame_sink2 : public gr_sync_block
 {
-  friend gr_ofdm_frame_sink2_sptr 
+  friend GR_CORE_API gr_ofdm_frame_sink2_sptr 
   gr_make_ofdm_frame_sink2 (gr_constellation_sptr constell, 
 			   gr_msg_queue_sptr target_queue, unsigned int occupied_tones,
 			   float phase_gain, float freq_gain);
diff --git a/gnuradio-core/src/lib/general/gr_ofdm_insert_preamble.h b/gnuradio-core/src/lib/general/gr_ofdm_insert_preamble.h
index 57c1af013c..10025dd14a 100644
--- a/gnuradio-core/src/lib/general/gr_ofdm_insert_preamble.h
+++ b/gnuradio-core/src/lib/general/gr_ofdm_insert_preamble.h
@@ -22,13 +22,14 @@
 #ifndef INCLUDED_GR_OFDM_INSERT_PREAMBLE_H
 #define INCLUDED_GR_OFDM_INSERT_PREAMBLE_H
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 #include <vector>
 
 class gr_ofdm_insert_preamble;
 typedef boost::shared_ptr<gr_ofdm_insert_preamble> gr_ofdm_insert_preamble_sptr;
 
-gr_ofdm_insert_preamble_sptr
+GR_CORE_API gr_ofdm_insert_preamble_sptr
 gr_make_ofdm_insert_preamble(int fft_length,
 			     const std::vector<std::vector<gr_complex> > &preamble);
 
@@ -62,9 +63,9 @@ gr_make_ofdm_insert_preamble(int fft_length,
  * \param preamble   vector of symbols that represent the pre-modulated preamble.
  */
 
-class gr_ofdm_insert_preamble : public gr_block
+class GR_CORE_API gr_ofdm_insert_preamble : public gr_block
 {
-  friend gr_ofdm_insert_preamble_sptr
+  friend GR_CORE_API gr_ofdm_insert_preamble_sptr
   gr_make_ofdm_insert_preamble(int fft_length,
 			       const std::vector<std::vector<gr_complex> > &preamble);
 
diff --git a/gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.h b/gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.h
index 5a21b90af2..f33ca42531 100644
--- a/gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.h
+++ b/gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_OFDM_MAPPER_BCV_H
 #define INCLUDED_GR_OFDM_MAPPER_BCV_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_message.h>
 #include <gr_msg_queue.h>
@@ -30,7 +31,7 @@
 class gr_ofdm_mapper_bcv;
 typedef boost::shared_ptr<gr_ofdm_mapper_bcv> gr_ofdm_mapper_bcv_sptr;
 
-gr_ofdm_mapper_bcv_sptr 
+GR_CORE_API gr_ofdm_mapper_bcv_sptr 
 gr_make_ofdm_mapper_bcv (const std::vector<gr_complex> &constellation, unsigned msgq_limit, 
 			 unsigned occupied_carriers, unsigned int fft_length);
 
@@ -42,9 +43,9 @@ gr_make_ofdm_mapper_bcv (const std::vector<gr_complex> &constellation, unsigned
  * \ingroup ofdm_blk
  */
 
-class gr_ofdm_mapper_bcv : public gr_sync_block
+class GR_CORE_API gr_ofdm_mapper_bcv : public gr_sync_block
 {
-  friend gr_ofdm_mapper_bcv_sptr
+  friend GR_CORE_API gr_ofdm_mapper_bcv_sptr
   gr_make_ofdm_mapper_bcv (const std::vector<gr_complex> &constellation, unsigned msgq_limit, 
 			   unsigned occupied_carriers, unsigned int fft_length);
  protected:
diff --git a/gnuradio-core/src/lib/general/gr_ofdm_sampler.h b/gnuradio-core/src/lib/general/gr_ofdm_sampler.h
index d059636edd..6e9dddada7 100644
--- a/gnuradio-core/src/lib/general/gr_ofdm_sampler.h
+++ b/gnuradio-core/src/lib/general/gr_ofdm_sampler.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_OFDM_SAMPLER_H
 #define INCLUDED_GR_OFDM_SAMPLER_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_ofdm_sampler;
 typedef boost::shared_ptr<gr_ofdm_sampler> gr_ofdm_sampler_sptr;
 
-gr_ofdm_sampler_sptr gr_make_ofdm_sampler (unsigned int fft_length, 
+GR_CORE_API gr_ofdm_sampler_sptr gr_make_ofdm_sampler (unsigned int fft_length, 
 					   unsigned int symbol_length,
 					   unsigned int timeout=1000);
 
@@ -36,9 +37,9 @@ gr_ofdm_sampler_sptr gr_make_ofdm_sampler (unsigned int fft_length,
  * \brief does the rest of the OFDM stuff
  * \ingroup ofdm_blk
  */
-class gr_ofdm_sampler : public gr_block
+class GR_CORE_API gr_ofdm_sampler : public gr_block
 {
-  friend gr_ofdm_sampler_sptr gr_make_ofdm_sampler (unsigned int fft_length, 
+  friend GR_CORE_API gr_ofdm_sampler_sptr gr_make_ofdm_sampler (unsigned int fft_length, 
 						    unsigned int symbol_length,
 						    unsigned int timeout);
 
diff --git a/gnuradio-core/src/lib/general/gr_pa_2x2_phase_combiner.h b/gnuradio-core/src/lib/general/gr_pa_2x2_phase_combiner.h
index ec163911a2..abb23e002f 100644
--- a/gnuradio-core/src/lib/general/gr_pa_2x2_phase_combiner.h
+++ b/gnuradio-core/src/lib/general/gr_pa_2x2_phase_combiner.h
@@ -22,12 +22,13 @@
 #ifndef INCLUDED_GR_PA_2X2_PHASE_COMBINER_H
 #define INCLUDED_GR_PA_2X2_PHASE_COMBINER_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_pa_2x2_phase_combiner;
 typedef boost::shared_ptr<gr_pa_2x2_phase_combiner> gr_pa_2x2_phase_combiner_sptr;
 
-gr_pa_2x2_phase_combiner_sptr gr_make_pa_2x2_phase_combiner ();
+GR_CORE_API gr_pa_2x2_phase_combiner_sptr gr_make_pa_2x2_phase_combiner ();
 
 /*!
  * \brief pa_2x2 phase combiner
@@ -40,7 +41,7 @@ gr_pa_2x2_phase_combiner_sptr gr_make_pa_2x2_phase_combiner ();
  *
  * dx and dy are lambda/2.
  */
-class gr_pa_2x2_phase_combiner : public gr_sync_block
+class GR_CORE_API gr_pa_2x2_phase_combiner : public gr_sync_block
 {
   static const int	NM = 4;
 
@@ -48,7 +49,7 @@ class gr_pa_2x2_phase_combiner : public gr_sync_block
   gr_complex	d_phase[NM];
 
   gr_pa_2x2_phase_combiner ();
-  friend gr_pa_2x2_phase_combiner_sptr gr_make_pa_2x2_phase_combiner();
+  friend GR_CORE_API gr_pa_2x2_phase_combiner_sptr gr_make_pa_2x2_phase_combiner();
 
  public:
   float theta() const { return d_theta; }
diff --git a/gnuradio-core/src/lib/general/gr_packet_sink.h b/gnuradio-core/src/lib/general/gr_packet_sink.h
index 73c5d6c522..89a95f3e30 100644
--- a/gnuradio-core/src/lib/general/gr_packet_sink.h
+++ b/gnuradio-core/src/lib/general/gr_packet_sink.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_PACKET_SINK_H
 #define INCLUDED_GR_PACKET_SINK_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_msg_queue.h>
 
 class gr_packet_sink;
 typedef boost::shared_ptr<gr_packet_sink> gr_packet_sink_sptr;
 
-gr_packet_sink_sptr 
+GR_CORE_API gr_packet_sink_sptr 
 gr_make_packet_sink (const std::vector<unsigned char>& sync_vector,
 		     gr_msg_queue_sptr target_queue,
 		     int threshold = -1	                // -1 -> use default
@@ -38,9 +39,9 @@ gr_make_packet_sink (const std::vector<unsigned char>& sync_vector,
  * \brief process received  bits looking for packet sync, header, and process bits into packet
  * \ingroup sink_blk
  */
-class gr_packet_sink : public gr_sync_block
+class GR_CORE_API gr_packet_sink : public gr_sync_block
 {
-  friend gr_packet_sink_sptr 
+  friend GR_CORE_API gr_packet_sink_sptr 
   gr_make_packet_sink (const std::vector<unsigned char>& sync_vector,
 		       gr_msg_queue_sptr target_queue,
 		       int threshold);
diff --git a/gnuradio-core/src/lib/general/gr_peak_detector2_fb.h b/gnuradio-core/src/lib/general/gr_peak_detector2_fb.h
index 58a006246f..5bb97fc5d1 100644
--- a/gnuradio-core/src/lib/general/gr_peak_detector2_fb.h
+++ b/gnuradio-core/src/lib/general/gr_peak_detector2_fb.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_gr_peak_detector2_FB_H
 #define INCLUDED_gr_peak_detector2_FB_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_peak_detector2_fb;
 typedef boost::shared_ptr<gr_peak_detector2_fb> gr_peak_detector2_fb_sptr;
 
-gr_peak_detector2_fb_sptr gr_make_peak_detector2_fb (float threshold_factor_rise = 7,
+GR_CORE_API gr_peak_detector2_fb_sptr gr_make_peak_detector2_fb (float threshold_factor_rise = 7,
 						     int look_ahead = 1000,
 						     float alpha = 0.001);
 
@@ -49,9 +50,9 @@ gr_peak_detector2_fb_sptr gr_make_peak_detector2_fb (float threshold_factor_rise
  * \param alpha The gain value of a single-pole moving average filter
  */
 
-class gr_peak_detector2_fb : public gr_sync_block
+class GR_CORE_API gr_peak_detector2_fb : public gr_sync_block
 {
-  friend gr_peak_detector2_fb_sptr 
+  friend GR_CORE_API gr_peak_detector2_fb_sptr 
   gr_make_peak_detector2_fb (float threshold_factor_rise, int look_ahead, float alpha);
   
   gr_peak_detector2_fb (float threshold_factor_rise, int look_ahead, float alpha);
diff --git a/gnuradio-core/src/lib/general/gr_phase_modulator_fc.h b/gnuradio-core/src/lib/general/gr_phase_modulator_fc.h
index 50157534bd..dd6e300a85 100644
--- a/gnuradio-core/src/lib/general/gr_phase_modulator_fc.h
+++ b/gnuradio-core/src/lib/general/gr_phase_modulator_fc.h
@@ -23,24 +23,25 @@
 #ifndef INCLUDED_GR_PHASE_MODULATOR_FC_H
 #define INCLUDED_GR_PHASE_MODULATOR_FC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_phase_modulator_fc;
 typedef boost::shared_ptr<gr_phase_modulator_fc> gr_phase_modulator_fc_sptr;
 
-gr_phase_modulator_fc_sptr gr_make_phase_modulator_fc (double sensitivity);
+GR_CORE_API gr_phase_modulator_fc_sptr gr_make_phase_modulator_fc (double sensitivity);
 
 /*!
  * \brief Phase modulator block
  * \ingroup modulation_blk 
  * output=complex(cos(in*sensitivity),sin(in*sensitivity))
  */
-class gr_phase_modulator_fc : public gr_sync_block
+class GR_CORE_API gr_phase_modulator_fc : public gr_sync_block
 {
   double	d_sensitivity;
   double	d_phase;
 
-  friend gr_phase_modulator_fc_sptr
+  friend GR_CORE_API gr_phase_modulator_fc_sptr
   gr_make_phase_modulator_fc (double sensitivity);
 
   gr_phase_modulator_fc (double sensitivity);
diff --git a/gnuradio-core/src/lib/general/gr_pll_carriertracking_cc.h b/gnuradio-core/src/lib/general/gr_pll_carriertracking_cc.h
index 195f06016a..27e74f111d 100644
--- a/gnuradio-core/src/lib/general/gr_pll_carriertracking_cc.h
+++ b/gnuradio-core/src/lib/general/gr_pll_carriertracking_cc.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_PLL_CARRIERTRACKING_CC_H
 #define INCLUDED_GR_PLL_CARRIERTRACKING_CC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_pll_carriertracking_cc;
 typedef boost::shared_ptr<gr_pll_carriertracking_cc> gr_pll_carriertracking_cc_sptr;
 
-gr_pll_carriertracking_cc_sptr gr_make_pll_carriertracking_cc (float alpha, float beta,
+GR_CORE_API gr_pll_carriertracking_cc_sptr gr_make_pll_carriertracking_cc (float alpha, float beta,
 					       float max_freq, float min_freq);
 /*!
  * \brief Implements a PLL which locks to the input frequency and outputs the 
@@ -46,9 +47,9 @@ gr_pll_carriertracking_cc_sptr gr_make_pll_carriertracking_cc (float alpha, floa
  * \sa gr_pll_freqdet_cf, gr_pll_carriertracking_cc
  */
 
-class gr_pll_carriertracking_cc : public gr_sync_block
+class GR_CORE_API gr_pll_carriertracking_cc : public gr_sync_block
 {
-  friend gr_pll_carriertracking_cc_sptr gr_make_pll_carriertracking_cc (float alpha, float beta,
+  friend GR_CORE_API gr_pll_carriertracking_cc_sptr gr_make_pll_carriertracking_cc (float alpha, float beta,
 							float max_freq, float min_freq);
 
   float d_alpha,d_beta,d_max_freq,d_min_freq,d_phase,d_freq,d_locksig,d_lock_threshold;
diff --git a/gnuradio-core/src/lib/general/gr_pll_freqdet_cf.h b/gnuradio-core/src/lib/general/gr_pll_freqdet_cf.h
index 0581c8724d..6ed1f99c2b 100644
--- a/gnuradio-core/src/lib/general/gr_pll_freqdet_cf.h
+++ b/gnuradio-core/src/lib/general/gr_pll_freqdet_cf.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_PLL_FREQDET_CF_H
 #define INCLUDED_GR_PLL_FREQDET_CF_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_pll_freqdet_cf;
 typedef boost::shared_ptr<gr_pll_freqdet_cf> gr_pll_freqdet_cf_sptr;
 
-gr_pll_freqdet_cf_sptr gr_make_pll_freqdet_cf (float alpha, float beta,
+GR_CORE_API gr_pll_freqdet_cf_sptr gr_make_pll_freqdet_cf (float alpha, float beta,
 					       float max_freq, float min_freq);
 /*!
  * \brief Implements a PLL which locks to the input frequency and outputs 
@@ -45,9 +46,9 @@ gr_pll_freqdet_cf_sptr gr_make_pll_freqdet_cf (float alpha, float beta,
  * \sa gr_pll_refout_cc, gr_pll_carriertracking_cc
  */
 
-class gr_pll_freqdet_cf : public gr_sync_block
+class GR_CORE_API gr_pll_freqdet_cf : public gr_sync_block
 {
-  friend gr_pll_freqdet_cf_sptr gr_make_pll_freqdet_cf (float alpha, float beta,
+  friend GR_CORE_API gr_pll_freqdet_cf_sptr gr_make_pll_freqdet_cf (float alpha, float beta,
 							float max_freq, float min_freq);
 
   float d_alpha,d_beta,d_max_freq,d_min_freq,d_phase,d_freq;
diff --git a/gnuradio-core/src/lib/general/gr_pll_refout_cc.h b/gnuradio-core/src/lib/general/gr_pll_refout_cc.h
index 3263c957f4..833ed51cc7 100644
--- a/gnuradio-core/src/lib/general/gr_pll_refout_cc.h
+++ b/gnuradio-core/src/lib/general/gr_pll_refout_cc.h
@@ -25,12 +25,13 @@
 #ifndef INCLUDED_GR_PLL_REFOUT_CC_H
 #define INCLUDED_GR_PLL_REFOUT_CC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_pll_refout_cc;
 typedef boost::shared_ptr<gr_pll_refout_cc> gr_pll_refout_cc_sptr;
 
-gr_pll_refout_cc_sptr gr_make_pll_refout_cc (float alpha, float beta,
+GR_CORE_API gr_pll_refout_cc_sptr gr_make_pll_refout_cc (float alpha, float beta,
 					       float max_freq, float min_freq);
 /*!
  * \brief Implements a PLL which locks to the input frequency and outputs a carrier
@@ -47,9 +48,9 @@ gr_pll_refout_cc_sptr gr_make_pll_refout_cc (float alpha, float beta,
  * and beta is the frequency gain (second order, units of radians per sample per radian)
  * \sa gr_pll_freqdet_cf, gr_pll_carriertracking_cc
  */
-class gr_pll_refout_cc : public gr_sync_block
+class GR_CORE_API gr_pll_refout_cc : public gr_sync_block
 {
-  friend gr_pll_refout_cc_sptr gr_make_pll_refout_cc (float alpha, float beta,
+  friend GR_CORE_API gr_pll_refout_cc_sptr gr_make_pll_refout_cc (float alpha, float beta,
 							float max_freq, float min_freq);
 
   float d_alpha,d_beta,d_max_freq,d_min_freq,d_phase,d_freq;
diff --git a/gnuradio-core/src/lib/general/gr_pn_correlator_cc.h b/gnuradio-core/src/lib/general/gr_pn_correlator_cc.h
index 73bb7aa8c9..75e2d1c7b4 100644
--- a/gnuradio-core/src/lib/general/gr_pn_correlator_cc.h
+++ b/gnuradio-core/src/lib/general/gr_pn_correlator_cc.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_PN_CORRELATOR_CC_H
 #define INCLUDED_GR_PN_CORRELATOR_CC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_decimator.h>
 #include <gri_glfsr.h>
 
 class gr_pn_correlator_cc;
 typedef boost::shared_ptr<gr_pn_correlator_cc> gr_pn_correlator_cc_sptr;
 
-gr_pn_correlator_cc_sptr
+GR_CORE_API gr_pn_correlator_cc_sptr
 gr_make_pn_correlator_cc(int degree, int mask=0, int seed=1);
 /*!
  * \brief PN code sequential search correlator
@@ -39,9 +40,9 @@ gr_make_pn_correlator_cc(int degree, int mask=0, int seed=1);
  * reference PN code, one sample per PN code period
  */
 
-class gr_pn_correlator_cc : public gr_sync_decimator
+class GR_CORE_API gr_pn_correlator_cc : public gr_sync_decimator
 {
-  friend gr_pn_correlator_cc_sptr gr_make_pn_correlator_cc(int degree, int mask, int seed);
+  friend GR_CORE_API gr_pn_correlator_cc_sptr gr_make_pn_correlator_cc(int degree, int mask, int seed);
 
   int        d_len;
   float      d_pn;
diff --git a/gnuradio-core/src/lib/general/gr_prefs.h b/gnuradio-core/src/lib/general/gr_prefs.h
index 4396d727cf..8ceb5b4652 100644
--- a/gnuradio-core/src/lib/general/gr_prefs.h
+++ b/gnuradio-core/src/lib/general/gr_prefs.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_PREFS_H
 #define INCLUDED_GR_PREFS_H
 
+#include <gr_core_api.h>
 #include <string>
 
 /*!
@@ -32,7 +33,7 @@
  * via the magic of SWIG directors.
  */
 
-class gr_prefs
+class GR_CORE_API gr_prefs
 {
 public:
   static gr_prefs *singleton();
diff --git a/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_c.h b/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_c.h
index ee88720107..e857686a8e 100644
--- a/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_c.h
+++ b/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_c.h
@@ -22,13 +22,14 @@
 #ifndef INCLUDED_GR_PROBE_AVG_MAG_SQRD_C_H
 #define INCLUDED_GR_PROBE_AVG_MAG_SQRD_C_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_single_pole_iir.h>
 
 class gr_probe_avg_mag_sqrd_c;
 typedef boost::shared_ptr<gr_probe_avg_mag_sqrd_c> gr_probe_avg_mag_sqrd_c_sptr;
 
-gr_probe_avg_mag_sqrd_c_sptr
+GR_CORE_API gr_probe_avg_mag_sqrd_c_sptr
 gr_make_probe_avg_mag_sqrd_c (double threshold_db, double alpha = 0.0001);
 
 /*!
@@ -41,14 +42,14 @@ gr_make_probe_avg_mag_sqrd_c (double threshold_db, double alpha = 0.0001);
  * The level and indication as to whether the level exceeds threshold
  * can be retrieved with the level and unmuted accessors.
  */
-class gr_probe_avg_mag_sqrd_c : public gr_sync_block
+class GR_CORE_API gr_probe_avg_mag_sqrd_c : public gr_sync_block
 {
   double					d_threshold;
   gr_single_pole_iir<double,double,double>	d_iir;
   bool						d_unmuted;
   double					d_level;
 
-  friend gr_probe_avg_mag_sqrd_c_sptr
+  friend GR_CORE_API gr_probe_avg_mag_sqrd_c_sptr
   gr_make_probe_avg_mag_sqrd_c (double threshold_db, double alpha);
 
   gr_probe_avg_mag_sqrd_c (double threshold_db, double alpha);
diff --git a/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_cf.h b/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_cf.h
index 6c536ca5b4..a85afcf3b3 100644
--- a/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_cf.h
+++ b/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_cf.h
@@ -22,13 +22,14 @@
 #ifndef INCLUDED_GR_PROBE_AVG_MAG_SQRD_CF_H
 #define INCLUDED_GR_PROBE_AVG_MAG_SQRD_CF_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_single_pole_iir.h>
 
 class gr_probe_avg_mag_sqrd_cf;
 typedef boost::shared_ptr<gr_probe_avg_mag_sqrd_cf> gr_probe_avg_mag_sqrd_cf_sptr;
 
-gr_probe_avg_mag_sqrd_cf_sptr
+GR_CORE_API gr_probe_avg_mag_sqrd_cf_sptr
 gr_make_probe_avg_mag_sqrd_cf (double threshold_db, double alpha = 0.0001);
 
 /*!
@@ -43,14 +44,14 @@ gr_make_probe_avg_mag_sqrd_cf (double threshold_db, double alpha = 0.0001);
  * can be retrieved with the level and unmuted accessors.
  *
  */
-class gr_probe_avg_mag_sqrd_cf : public gr_sync_block
+class GR_CORE_API gr_probe_avg_mag_sqrd_cf : public gr_sync_block
 {
   double					d_threshold;
   gr_single_pole_iir<double,double,double>	d_iir;
   bool						d_unmuted;
   double					d_level;
 
-  friend gr_probe_avg_mag_sqrd_cf_sptr
+  friend GR_CORE_API gr_probe_avg_mag_sqrd_cf_sptr
   gr_make_probe_avg_mag_sqrd_cf (double threshold_db, double alpha);
 
   gr_probe_avg_mag_sqrd_cf (double threshold_db, double alpha);
diff --git a/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_f.h b/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_f.h
index b31e54f6bc..4181ccf469 100644
--- a/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_f.h
+++ b/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_f.h
@@ -22,13 +22,14 @@
 #ifndef INCLUDED_GR_PROBE_AVG_MAG_SQRD_F_H
 #define INCLUDED_GR_PROBE_AVG_MAG_SQRD_F_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_single_pole_iir.h>
 
 class gr_probe_avg_mag_sqrd_f;
 typedef boost::shared_ptr<gr_probe_avg_mag_sqrd_f> gr_probe_avg_mag_sqrd_f_sptr;
 
-gr_probe_avg_mag_sqrd_f_sptr
+GR_CORE_API gr_probe_avg_mag_sqrd_f_sptr
 gr_make_probe_avg_mag_sqrd_f (double threshold_db, double alpha = 0.0001);
 
 /*!
@@ -41,14 +42,14 @@ gr_make_probe_avg_mag_sqrd_f (double threshold_db, double alpha = 0.0001);
  * The level and indication as to whether the level exceeds threshold
  * can be retrieved with the level and unmuted accessors.
  */
-class gr_probe_avg_mag_sqrd_f : public gr_sync_block
+class GR_CORE_API gr_probe_avg_mag_sqrd_f : public gr_sync_block
 {
   double					d_threshold;
   gr_single_pole_iir<double,double,double>	d_iir;
   bool						d_unmuted;
   double					d_level;
 
-  friend gr_probe_avg_mag_sqrd_f_sptr
+  friend GR_CORE_API gr_probe_avg_mag_sqrd_f_sptr
   gr_make_probe_avg_mag_sqrd_f (double threshold_db, double alpha);
 
   gr_probe_avg_mag_sqrd_f (double threshold_db, double alpha);
diff --git a/gnuradio-core/src/lib/general/gr_probe_density_b.h b/gnuradio-core/src/lib/general/gr_probe_density_b.h
index 92b98d1938..0af30c665d 100644
--- a/gnuradio-core/src/lib/general/gr_probe_density_b.h
+++ b/gnuradio-core/src/lib/general/gr_probe_density_b.h
@@ -20,13 +20,14 @@
 #ifndef INCLUDED_GR_PROBE_DENSITY_B_H
 #define INCLUDED_GR_PROBE_DENSITY_B_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_probe_density_b;
 
 typedef boost::shared_ptr<gr_probe_density_b> gr_probe_density_b_sptr;
 
-gr_probe_density_b_sptr gr_make_probe_density_b(double alpha);
+GR_CORE_API gr_probe_density_b_sptr gr_make_probe_density_b(double alpha);
 
 /*!
  * This block maintains a running average of the input stream and
@@ -40,10 +41,10 @@ gr_probe_density_b_sptr gr_make_probe_density_b(double alpha);
  *
  */
 
-class gr_probe_density_b : public gr_sync_block
+class GR_CORE_API gr_probe_density_b : public gr_sync_block
 {
 private:
-  friend gr_probe_density_b_sptr gr_make_probe_density_b(double alpha);
+  friend GR_CORE_API gr_probe_density_b_sptr gr_make_probe_density_b(double alpha);
 
   double d_alpha;
   double d_beta;
diff --git a/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.h b/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.h
index 279a4a5b8d..870e467013 100644
--- a/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.h
+++ b/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.h
@@ -22,12 +22,13 @@
 #ifndef INCLUDED_GR_PROBE_MPSK_SNR_C_H
 #define INCLUDED_GR_PROBE_MPSK_SNR_C_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_probe_mpsk_snr_c;
 typedef boost::shared_ptr<gr_probe_mpsk_snr_c> gr_probe_mpsk_snr_c_sptr;
 
-gr_probe_mpsk_snr_c_sptr
+GR_CORE_API gr_probe_mpsk_snr_c_sptr
 gr_make_probe_mpsk_snr_c(double alpha = 0.0001);
 
 /*!
@@ -46,7 +47,7 @@ gr_make_probe_mpsk_snr_c(double alpha = 0.0001);
  * This SNR estimator is inaccurate below about 7dB SNR.
  *
  */
-class gr_probe_mpsk_snr_c : public gr_sync_block
+class GR_CORE_API gr_probe_mpsk_snr_c : public gr_sync_block
 {
   double d_alpha;
   double d_beta;
@@ -54,7 +55,7 @@ class gr_probe_mpsk_snr_c : public gr_sync_block
   double d_noise_variance;
 
   // Factory function returning shared pointer of this class
-  friend gr_probe_mpsk_snr_c_sptr
+  friend GR_CORE_API gr_probe_mpsk_snr_c_sptr
   gr_make_probe_mpsk_snr_c(double alpha);
 
   // Private constructor
diff --git a/gnuradio-core/src/lib/general/gr_probe_signal_f.h b/gnuradio-core/src/lib/general/gr_probe_signal_f.h
index 9605bb6858..b99c769760 100644
--- a/gnuradio-core/src/lib/general/gr_probe_signal_f.h
+++ b/gnuradio-core/src/lib/general/gr_probe_signal_f.h
@@ -22,23 +22,24 @@
 #ifndef INCLUDED_GR_PROBE_SIGNAL_F_H
 #define INCLUDED_GR_PROBE_SIGNAL_F_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_probe_signal_f;
 typedef boost::shared_ptr<gr_probe_signal_f> gr_probe_signal_f_sptr;
 
-gr_probe_signal_f_sptr
+GR_CORE_API gr_probe_signal_f_sptr
 gr_make_probe_signal_f ();
 
 /*!
  * \brief Sink that allows a sample to be grabbed from Python.
  * \ingroup sink_blk
  */
-class gr_probe_signal_f : public gr_sync_block
+class GR_CORE_API gr_probe_signal_f : public gr_sync_block
 {
   float	d_level;
 
-  friend gr_probe_signal_f_sptr
+  friend GR_CORE_API gr_probe_signal_f_sptr
   gr_make_probe_signal_f();
 
   gr_probe_signal_f();
diff --git a/gnuradio-core/src/lib/general/gr_pwr_squelch_cc.h b/gnuradio-core/src/lib/general/gr_pwr_squelch_cc.h
index 9c519f3836..2a008d92d1 100644
--- a/gnuradio-core/src/lib/general/gr_pwr_squelch_cc.h
+++ b/gnuradio-core/src/lib/general/gr_pwr_squelch_cc.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_PWR_SQUELCH_CC_H
 #define INCLUDED_GR_PWR_SQUELCH_CC_H
 
+#include <gr_core_api.h>
 #include <cmath>
 #include <gr_squelch_base_cc.h>
 #include <gr_single_pole_iir.h>
@@ -30,21 +31,21 @@
 class gr_pwr_squelch_cc;
 typedef boost::shared_ptr<gr_pwr_squelch_cc> gr_pwr_squelch_cc_sptr;
 
-gr_pwr_squelch_cc_sptr 
+GR_CORE_API gr_pwr_squelch_cc_sptr 
 gr_make_pwr_squelch_cc(double db, double alpha = 0.0001, int ramp=0, bool gate=false);
 
 /*!
  * \brief gate or zero output when input power below threshold
  * \ingroup level_blk
  */
-class gr_pwr_squelch_cc : public gr_squelch_base_cc
+class GR_CORE_API gr_pwr_squelch_cc : public gr_squelch_base_cc
 {
 private:
   double d_threshold;
   double d_pwr;
   gr_single_pole_iir<double,double,double> d_iir;
 
-  friend gr_pwr_squelch_cc_sptr gr_make_pwr_squelch_cc(double db, double alpha, int ramp, bool gate);
+  friend GR_CORE_API gr_pwr_squelch_cc_sptr gr_make_pwr_squelch_cc(double db, double alpha, int ramp, bool gate);
   gr_pwr_squelch_cc(double db, double alpha, int ramp, bool gate);
 
 protected:
diff --git a/gnuradio-core/src/lib/general/gr_pwr_squelch_ff.h b/gnuradio-core/src/lib/general/gr_pwr_squelch_ff.h
index 6952dbce2e..27a7306b37 100644
--- a/gnuradio-core/src/lib/general/gr_pwr_squelch_ff.h
+++ b/gnuradio-core/src/lib/general/gr_pwr_squelch_ff.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_PWR_SQUELCH_FF_H
 #define INCLUDED_GR_PWR_SQUELCH_FF_H
 
+#include <gr_core_api.h>
 #include <cmath>
 #include <gr_squelch_base_ff.h>
 #include <gr_single_pole_iir.h>
@@ -30,21 +31,21 @@
 class gr_pwr_squelch_ff;
 typedef boost::shared_ptr<gr_pwr_squelch_ff> gr_pwr_squelch_ff_sptr;
 
-gr_pwr_squelch_ff_sptr 
+GR_CORE_API gr_pwr_squelch_ff_sptr 
 gr_make_pwr_squelch_ff(double db, double alpha = 0.0001, int ramp=0, bool gate=false);
 
 /*!
  * \brief gate or zero output when input power below threshold
  * \ingroup level_blk
  */
-class gr_pwr_squelch_ff : public gr_squelch_base_ff
+class GR_CORE_API gr_pwr_squelch_ff : public gr_squelch_base_ff
 {
 private:
   double d_threshold;
   double d_pwr;
   gr_single_pole_iir<double,double,double> d_iir;
 
-  friend gr_pwr_squelch_ff_sptr gr_make_pwr_squelch_ff(double db, double alpha, int ramp, bool gate);
+  friend GR_CORE_API gr_pwr_squelch_ff_sptr gr_make_pwr_squelch_ff(double db, double alpha, int ramp, bool gate);
   gr_pwr_squelch_ff(double db, double alpha, int ramp, bool gate);
 
 protected:
diff --git a/gnuradio-core/src/lib/general/gr_quadrature_demod_cf.h b/gnuradio-core/src/lib/general/gr_quadrature_demod_cf.h
index df6de93d5a..755f2839a0 100644
--- a/gnuradio-core/src/lib/general/gr_quadrature_demod_cf.h
+++ b/gnuradio-core/src/lib/general/gr_quadrature_demod_cf.h
@@ -23,11 +23,12 @@
 #ifndef INCLUDED_GR_QUADRATURE_DEMOD_CF_H
 #define INCLUDED_GR_QUADRATURE_DEMOD_CF_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_quadrature_demod_cf;
 typedef boost::shared_ptr<gr_quadrature_demod_cf> gr_quadrature_demod_cf_sptr;
-gr_quadrature_demod_cf_sptr gr_make_quadrature_demod_cf (float gain);
+GR_CORE_API gr_quadrature_demod_cf_sptr gr_make_quadrature_demod_cf (float gain);
 
 /*!
  * \brief quadrature demodulator: complex in, float out
@@ -36,9 +37,9 @@ gr_quadrature_demod_cf_sptr gr_make_quadrature_demod_cf (float gain);
  * This can be used to demod FM, FSK, GMSK, etc.
  * The input is complex baseband.
  */
-class gr_quadrature_demod_cf : public gr_sync_block
+class GR_CORE_API gr_quadrature_demod_cf : public gr_sync_block
 {
-  friend gr_quadrature_demod_cf_sptr gr_make_quadrature_demod_cf (float gain);
+  friend GR_CORE_API gr_quadrature_demod_cf_sptr gr_make_quadrature_demod_cf (float gain);
   gr_quadrature_demod_cf (float gain);
 
   float		d_gain;
diff --git a/gnuradio-core/src/lib/general/gr_rail_ff.h b/gnuradio-core/src/lib/general/gr_rail_ff.h
index d9e19a964c..225bdf36ec 100644
--- a/gnuradio-core/src/lib/general/gr_rail_ff.h
+++ b/gnuradio-core/src/lib/general/gr_rail_ff.h
@@ -23,6 +23,7 @@
 #ifndef   	INCLUDED_GR_RAIL_FF_H_
 # define   	INCLUDED_GR_RAIL_FF_H_
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 /*!
@@ -33,11 +34,11 @@
 class gr_rail_ff;
 typedef boost::shared_ptr<gr_rail_ff> gr_rail_ff_sptr;
 
-gr_rail_ff_sptr gr_make_rail_ff(float lo, float hi);
+GR_CORE_API gr_rail_ff_sptr gr_make_rail_ff(float lo, float hi);
 
-class gr_rail_ff : public gr_sync_block
+class GR_CORE_API gr_rail_ff : public gr_sync_block
 {
-  friend gr_rail_ff_sptr gr_make_rail_ff (float lo, float hi);
+  friend GR_CORE_API gr_rail_ff_sptr gr_make_rail_ff (float lo, float hi);
 
   float	d_lo, d_hi;		// the constant
   gr_rail_ff(float lo, float hi);
diff --git a/gnuradio-core/src/lib/general/gr_random.h b/gnuradio-core/src/lib/general/gr_random.h
index e5002fd333..13dbbfb042 100644
--- a/gnuradio-core/src/lib/general/gr_random.h
+++ b/gnuradio-core/src/lib/general/gr_random.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_RANDOM_H
 #define INCLUDED_GR_RANDOM_H
 
+#include <gr_core_api.h>
 #include <gr_complex.h>
 
 /*!
  * \brief pseudo random number generator
  * \ingroup math_blk
  */
-class gr_random {
+class GR_CORE_API gr_random {
 protected:
   static const int NTAB  = 32;
   long  d_seed;
diff --git a/gnuradio-core/src/lib/general/gr_regenerate_bb.h b/gnuradio-core/src/lib/general/gr_regenerate_bb.h
index db511b2284..67cfedac7d 100644
--- a/gnuradio-core/src/lib/general/gr_regenerate_bb.h
+++ b/gnuradio-core/src/lib/general/gr_regenerate_bb.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_REGENERATE_BB_H
 #define INCLUDED_GR_REGENERATE_BB_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_regenerate_bb;
 typedef boost::shared_ptr<gr_regenerate_bb> gr_regenerate_bb_sptr;
 
-gr_regenerate_bb_sptr gr_make_regenerate_bb (int period, unsigned int max_regen=500);
+GR_CORE_API gr_regenerate_bb_sptr gr_make_regenerate_bb (int period, unsigned int max_regen=500);
 
 /*!
  * \brief Detect the peak of a signal and repeat every period samples
@@ -40,7 +41,7 @@ gr_regenerate_bb_sptr gr_make_regenerate_bb (int period, unsigned int max_regen=
  *
  * Note that if max_regen=(-1)/ULONG_MAX then the regeneration will run forever.
  */
-class gr_regenerate_bb : public gr_sync_block
+class GR_CORE_API gr_regenerate_bb : public gr_sync_block
 {
   /*!
    * \brief Make a regenerate block
@@ -48,7 +49,7 @@ class gr_regenerate_bb : public gr_sync_block
    * \param max_regen The maximum number of regenerations to perform; if set to 
    * ULONG_MAX, it will regenerate continuously.
    */
-  friend gr_regenerate_bb_sptr gr_make_regenerate_bb (int period, unsigned int max_regen);
+  friend GR_CORE_API gr_regenerate_bb_sptr gr_make_regenerate_bb (int period, unsigned int max_regen);
 
   gr_regenerate_bb (int period, unsigned int max_regen);
 
diff --git a/gnuradio-core/src/lib/general/gr_remez.h b/gnuradio-core/src/lib/general/gr_remez.h
index 85e1516a5c..f7b8a72a3a 100644
--- a/gnuradio-core/src/lib/general/gr_remez.h
+++ b/gnuradio-core/src/lib/general/gr_remez.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_REMEZ_H
 #define INCLUDED_GR_REMEZ_H
 
+#include <gr_core_api.h>
 #include <gr_types.h>
 #include <string>
 #include <stdexcept>
@@ -51,7 +52,7 @@
  * \throws std::runtime_error if args are invalid or calculation fails to converge.
  */
 
-std::vector<double>
+GR_CORE_API std::vector<double>
 gr_remez (int order,
 	  const std::vector<double> &bands,
 	  const std::vector<double> &ampl,
diff --git a/gnuradio-core/src/lib/general/gr_repeat.h b/gnuradio-core/src/lib/general/gr_repeat.h
index f323fc375b..b90f2f51d2 100644
--- a/gnuradio-core/src/lib/general/gr_repeat.h
+++ b/gnuradio-core/src/lib/general/gr_repeat.h
@@ -22,23 +22,24 @@
 #ifndef INCLUDED_GR_REPEAT_H
 #define INCLUDED_GR_REPEAT_H
 
+#include <gr_core_api.h>
 #include <gr_sync_interpolator.h>
 
 class gr_repeat;
 
 typedef boost::shared_ptr<gr_repeat> gr_repeat_sptr;
 
-gr_repeat_sptr gr_make_repeat(size_t itemsize, int interp);
+GR_CORE_API gr_repeat_sptr gr_make_repeat(size_t itemsize, int interp);
 
 /*!
  * \brief Repeat a sample 'interp' times in output stream
  * \ingroup misc_blk
  */
 
-class gr_repeat : public gr_sync_interpolator
+class GR_CORE_API gr_repeat : public gr_sync_interpolator
 {
 private:
-  friend gr_repeat_sptr gr_make_repeat(size_t itemsize, int interp);
+  friend GR_CORE_API gr_repeat_sptr gr_make_repeat(size_t itemsize, int interp);
 						     
   gr_repeat(size_t itemsize, int interp);
 
diff --git a/gnuradio-core/src/lib/general/gr_reverse.h b/gnuradio-core/src/lib/general/gr_reverse.h
index d79d34e911..43d84fda7c 100644
--- a/gnuradio-core/src/lib/general/gr_reverse.h
+++ b/gnuradio-core/src/lib/general/gr_reverse.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_REVERSE_H
 #define INCLUDED_GR_REVERSE_H
 
+#include <gr_core_api.h>
 #include <vector>
 #include <gr_complex.h>
 
diff --git a/gnuradio-core/src/lib/general/gr_rms_cf.h b/gnuradio-core/src/lib/general/gr_rms_cf.h
index 86c4bdbaca..f1bd9802c0 100644
--- a/gnuradio-core/src/lib/general/gr_rms_cf.h
+++ b/gnuradio-core/src/lib/general/gr_rms_cf.h
@@ -22,25 +22,26 @@
 #ifndef INCLUDED_GR_RMS_CF_H
 #define INCLUDED_GR_RMS_CF_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_single_pole_iir.h>
 
 class gr_rms_cf;
 typedef boost::shared_ptr<gr_rms_cf> gr_rms_cf_sptr;
 
-gr_rms_cf_sptr
+GR_CORE_API gr_rms_cf_sptr
 gr_make_rms_cf (double alpha = 0.0001);
 
 /*!
  * \brief RMS average power
  * \ingroup math_blk
  */
-class gr_rms_cf : public gr_sync_block
+class GR_CORE_API gr_rms_cf : public gr_sync_block
 {
   gr_single_pole_iir<double,double,double>	d_iir;
   bool						d_unmuted;
 
-  friend gr_rms_cf_sptr
+  friend GR_CORE_API gr_rms_cf_sptr
   gr_make_rms_cf (double alpha);
 
   gr_rms_cf (double alpha);
diff --git a/gnuradio-core/src/lib/general/gr_rms_ff.h b/gnuradio-core/src/lib/general/gr_rms_ff.h
index ed1635eb14..0bbd53b70a 100644
--- a/gnuradio-core/src/lib/general/gr_rms_ff.h
+++ b/gnuradio-core/src/lib/general/gr_rms_ff.h
@@ -22,25 +22,26 @@
 #ifndef INCLUDED_GR_RMS_FF_H
 #define INCLUDED_GR_RMS_FF_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_single_pole_iir.h>
 
 class gr_rms_ff;
 typedef boost::shared_ptr<gr_rms_ff> gr_rms_ff_sptr;
 
-gr_rms_ff_sptr
+GR_CORE_API gr_rms_ff_sptr
 gr_make_rms_ff (double alpha = 0.0001);
 
 /*!
  * \brief RMS average power
  * \ingroup math_blk
  */
-class gr_rms_ff : public gr_sync_block
+class GR_CORE_API gr_rms_ff : public gr_sync_block
 {
   gr_single_pole_iir<double,double,double>	d_iir;
   bool						d_unmuted;
 
-  friend gr_rms_ff_sptr
+  friend GR_CORE_API gr_rms_ff_sptr
   gr_make_rms_ff (double alpha);
 
   gr_rms_ff (double alpha);
diff --git a/gnuradio-core/src/lib/general/gr_scrambler_bb.h b/gnuradio-core/src/lib/general/gr_scrambler_bb.h
index 7efe8b5982..79905933df 100644
--- a/gnuradio-core/src/lib/general/gr_scrambler_bb.h
+++ b/gnuradio-core/src/lib/general/gr_scrambler_bb.h
@@ -22,13 +22,14 @@
 #ifndef INCLUDED_GR_SCRAMBLER_BB_H
 #define INCLUDED_GR_SCRAMBLER_BB_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include "gri_lfsr.h"
 
 class gr_scrambler_bb;
 typedef boost::shared_ptr<gr_scrambler_bb> gr_scrambler_bb_sptr;
 
-gr_scrambler_bb_sptr gr_make_scrambler_bb(int mask, int seed, int len);
+GR_CORE_API gr_scrambler_bb_sptr gr_make_scrambler_bb(int mask, int seed, int len);
 
 /*!
  * Scramble an input stream using an LFSR.  This block works on the LSB only
@@ -42,9 +43,9 @@ gr_scrambler_bb_sptr gr_make_scrambler_bb(int mask, int seed, int len);
  * \ingroup coding_blk
  */
 
-class gr_scrambler_bb : public gr_sync_block
+class GR_CORE_API gr_scrambler_bb : public gr_sync_block
 {
-  friend gr_scrambler_bb_sptr gr_make_scrambler_bb(int mask, int seed, int len);
+  friend GR_CORE_API gr_scrambler_bb_sptr gr_make_scrambler_bb(int mask, int seed, int len);
 
   gri_lfsr d_lfsr;
 
diff --git a/gnuradio-core/src/lib/general/gr_short_to_float.h b/gnuradio-core/src/lib/general/gr_short_to_float.h
index ccb19d9f2e..b40c966ea5 100644
--- a/gnuradio-core/src/lib/general/gr_short_to_float.h
+++ b/gnuradio-core/src/lib/general/gr_short_to_float.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_SHORT_TO_FLOAT_H
 #define INCLUDED_GR_SHORT_TO_FLOAT_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_short_to_float;
 typedef boost::shared_ptr<gr_short_to_float> gr_short_to_float_sptr;
 
-gr_short_to_float_sptr
+GR_CORE_API gr_short_to_float_sptr
 gr_make_short_to_float ();
 
 /*!
@@ -36,9 +37,9 @@ gr_make_short_to_float ();
  * \ingroup converter_blk
  */
 
-class gr_short_to_float : public gr_sync_block
+class GR_CORE_API gr_short_to_float : public gr_sync_block
 {
-  friend gr_short_to_float_sptr gr_make_short_to_float ();
+  friend GR_CORE_API gr_short_to_float_sptr gr_make_short_to_float ();
   gr_short_to_float ();
 
  public:
diff --git a/gnuradio-core/src/lib/general/gr_simple_correlator.h b/gnuradio-core/src/lib/general/gr_simple_correlator.h
index 55d799cfa1..4c5f060cd6 100644
--- a/gnuradio-core/src/lib/general/gr_simple_correlator.h
+++ b/gnuradio-core/src/lib/general/gr_simple_correlator.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_SIMPLE_CORRELATOR_H
 #define INCLUDED_GR_SIMPLE_CORRELATOR_H
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 #include <assert.h>
 
@@ -31,13 +32,13 @@
 class gr_simple_correlator;
 typedef boost::shared_ptr<gr_simple_correlator> gr_simple_correlator_sptr;
 
-gr_simple_correlator_sptr gr_make_simple_correlator (int payload_bytesize);
+GR_CORE_API gr_simple_correlator_sptr gr_make_simple_correlator (int payload_bytesize);
 
 /*!
  * \brief inverse of gr_simple_framer (more or less)
  * \ingroup sync_blk
  */
-class gr_simple_correlator : public gr_block
+class GR_CORE_API gr_simple_correlator : public gr_block
 {
   static const int OVERSAMPLE = 8;
   enum state_t { ST_LOOKING, ST_UNDER_THRESHOLD, ST_LOCKED };
@@ -63,7 +64,7 @@ class gr_simple_correlator : public gr_block
   FILE		*d_debug_fp;			// binary log file
 #endif
 
-  friend gr_simple_correlator_sptr gr_make_simple_correlator (int payload_bytesize);
+  friend GR_CORE_API gr_simple_correlator_sptr gr_make_simple_correlator (int payload_bytesize);
   gr_simple_correlator (int payload_bytesize);
 
 
diff --git a/gnuradio-core/src/lib/general/gr_simple_framer.h b/gnuradio-core/src/lib/general/gr_simple_framer.h
index d930da33b7..15f392e4a6 100644
--- a/gnuradio-core/src/lib/general/gr_simple_framer.h
+++ b/gnuradio-core/src/lib/general/gr_simple_framer.h
@@ -23,25 +23,26 @@
 #ifndef INCLUDED_GR_SIMPLE_FRAMER_H
 #define INCLUDED_GR_SIMPLE_FRAMER_H
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 
 class gr_simple_framer;
 typedef boost::shared_ptr<gr_simple_framer> gr_simple_framer_sptr;
 
-gr_simple_framer_sptr gr_make_simple_framer (int payload_bytesize);
+GR_CORE_API gr_simple_framer_sptr gr_make_simple_framer (int payload_bytesize);
 
 /*!
  * \brief add sync field, seq number and command field to payload
  * \ingroup sync_blk
  */
-class gr_simple_framer : public gr_block
+class GR_CORE_API gr_simple_framer : public gr_block
 {
   int	d_seqno;
   int	d_payload_bytesize;
   int	d_input_block_size;	// bytes
   int	d_output_block_size;	// bytes
 
-  friend gr_simple_framer_sptr gr_make_simple_framer (int payload_bytesize);
+  friend GR_CORE_API gr_simple_framer_sptr gr_make_simple_framer (int payload_bytesize);
   gr_simple_framer (int payload_bytesize);
 
  public:
diff --git a/gnuradio-core/src/lib/general/gr_simple_squelch_cc.h b/gnuradio-core/src/lib/general/gr_simple_squelch_cc.h
index 30744f6fb4..590b86de88 100644
--- a/gnuradio-core/src/lib/general/gr_simple_squelch_cc.h
+++ b/gnuradio-core/src/lib/general/gr_simple_squelch_cc.h
@@ -22,26 +22,27 @@
 #ifndef INCLUDED_GR_SIMPLE_SQUELCH_CC_H
 #define INCLUDED_GR_SIMPLE_SQUELCH_CC_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_single_pole_iir.h>
 
 class gr_simple_squelch_cc;
 typedef boost::shared_ptr<gr_simple_squelch_cc> gr_simple_squelch_cc_sptr;
 
-gr_simple_squelch_cc_sptr
+GR_CORE_API gr_simple_squelch_cc_sptr
 gr_make_simple_squelch_cc (double threshold_db, double alpha = 0.0001);
 
 /*!
  * \brief simple squelch block based on average signal power and threshold in dB.
  * \ingroup level_blk
  */
-class gr_simple_squelch_cc : public gr_sync_block
+class GR_CORE_API gr_simple_squelch_cc : public gr_sync_block
 {
   double					d_threshold;
   gr_single_pole_iir<double,double,double>	d_iir;
   bool						d_unmuted;
 
-  friend gr_simple_squelch_cc_sptr
+  friend GR_CORE_API gr_simple_squelch_cc_sptr
   gr_make_simple_squelch_cc (double threshold_db, double alpha);
 
   gr_simple_squelch_cc (double threshold_db, double alpha);
diff --git a/gnuradio-core/src/lib/general/gr_skiphead.h b/gnuradio-core/src/lib/general/gr_skiphead.h
index 933c126e36..2beaaeab05 100644
--- a/gnuradio-core/src/lib/general/gr_skiphead.h
+++ b/gnuradio-core/src/lib/general/gr_skiphead.h
@@ -23,12 +23,16 @@
 #ifndef INCLUDED_GR_SKIPHEAD_H
 #define INCLUDED_GR_SKIPHEAD_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <stddef.h>      // size_t
 
 class gr_skiphead;
 typedef boost::shared_ptr<gr_skiphead> gr_skiphead_sptr;
 
+GR_CORE_API gr_skiphead_sptr
+gr_make_skiphead (size_t itemsize, uint64_t nitems_to_skip);
+
 
 /*!
  * \brief skips the first N items, from then on copies items to the output
@@ -37,9 +41,9 @@ typedef boost::shared_ptr<gr_skiphead> gr_skiphead_sptr;
  * Useful for building test cases and sources which have metadata or junk at the start
  */
 
-class gr_skiphead : public gr_block
+class GR_CORE_API gr_skiphead : public gr_block
 {
-  friend gr_skiphead_sptr gr_make_skiphead (size_t itemsize, uint64_t nitems_to_skip);
+  friend GR_CORE_API gr_skiphead_sptr gr_make_skiphead (size_t itemsize, uint64_t nitems_to_skip);
   gr_skiphead (size_t itemsize, uint64_t nitems_to_skip);
 
   uint64_t  		d_nitems_to_skip;
@@ -53,8 +57,4 @@ class gr_skiphead : public gr_block
 		   gr_vector_void_star &output_items);
 };
 
-gr_skiphead_sptr
-gr_make_skiphead (size_t itemsize, uint64_t nitems_to_skip);
-
-
 #endif /* INCLUDED_GR_SKIPHEAD_H */
diff --git a/gnuradio-core/src/lib/general/gr_squash_ff.h b/gnuradio-core/src/lib/general/gr_squash_ff.h
index ee3426caeb..f7fea16481 100644
--- a/gnuradio-core/src/lib/general/gr_squash_ff.h
+++ b/gnuradio-core/src/lib/general/gr_squash_ff.h
@@ -23,6 +23,7 @@
 #ifndef   	INCLUDED_GR_SQUASH_FF_H_
 # define   	INCLUDED_GR_SQUASH_FF_H_
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gsl/gsl_errno.h>
 #include <gsl/gsl_interp.h>
@@ -36,12 +37,12 @@
 class gr_squash_ff;
 typedef boost::shared_ptr<gr_squash_ff> gr_squash_ff_sptr;
 
-gr_squash_ff_sptr gr_make_squash_ff(const std::vector<float> &igrid,
+GR_CORE_API gr_squash_ff_sptr gr_make_squash_ff(const std::vector<float> &igrid,
 				    const std::vector<float> &ogrid);
 
-class gr_squash_ff : public gr_sync_block
+class GR_CORE_API gr_squash_ff : public gr_sync_block
 {
-  friend gr_squash_ff_sptr gr_make_squash_ff(const std::vector<float> &igrid,
+  friend GR_CORE_API gr_squash_ff_sptr gr_make_squash_ff(const std::vector<float> &igrid,
 					     const std::vector<float> &ogrid);
   
   size_t  d_inum;
diff --git a/gnuradio-core/src/lib/general/gr_squelch_base_cc.h b/gnuradio-core/src/lib/general/gr_squelch_base_cc.h
index 51e2e14e58..7c15e01212 100644
--- a/gnuradio-core/src/lib/general/gr_squelch_base_cc.h
+++ b/gnuradio-core/src/lib/general/gr_squelch_base_cc.h
@@ -23,9 +23,10 @@
 #ifndef INCLUDED_GR_SQUELCH_BASE_CC_H
 #define INCLUDED_GR_SQUELCH_BASE_CC_H
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 
-class gr_squelch_base_cc : public gr_block
+class GR_CORE_API gr_squelch_base_cc : public gr_block
 {
 private:
   int	 d_ramp;
diff --git a/gnuradio-core/src/lib/general/gr_squelch_base_ff.h b/gnuradio-core/src/lib/general/gr_squelch_base_ff.h
index 2ca108c754..92a064e63f 100644
--- a/gnuradio-core/src/lib/general/gr_squelch_base_ff.h
+++ b/gnuradio-core/src/lib/general/gr_squelch_base_ff.h
@@ -23,9 +23,10 @@
 #ifndef INCLUDED_GR_SQUELCH_BASE_FF_H
 #define INCLUDED_GR_SQUELCH_BASE_FF_H
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 
-class gr_squelch_base_ff : public gr_block
+class GR_CORE_API gr_squelch_base_ff : public gr_block
 {
 private:
   int	 d_ramp;
diff --git a/gnuradio-core/src/lib/general/gr_stream_mux.h b/gnuradio-core/src/lib/general/gr_stream_mux.h
index 29829339eb..68415ab1d5 100644
--- a/gnuradio-core/src/lib/general/gr_stream_mux.h
+++ b/gnuradio-core/src/lib/general/gr_stream_mux.h
@@ -24,6 +24,7 @@
 #define INCLUDED_GR_STREAM_MUX_H
 
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 #include <vector>
 
@@ -45,7 +46,7 @@ typedef boost::shared_ptr<gr_stream_mux> gr_stream_mux_sptr;
 
 
 
-gr_stream_mux_sptr 
+GR_CORE_API gr_stream_mux_sptr 
 gr_make_stream_mux (size_t itemsize, const std::vector<int> &lengths);
 
 
@@ -60,9 +61,9 @@ gr_make_stream_mux (size_t itemsize, const std::vector<int> &lengths);
  * [N0, N1, N2, ..., Nm, N0, N1, ...]
  */
 
-class gr_stream_mux : public gr_block
+class GR_CORE_API gr_stream_mux : public gr_block
 {
-  friend gr_stream_mux_sptr
+  friend GR_CORE_API gr_stream_mux_sptr
     gr_make_stream_mux (size_t itemsize, const std::vector<int> &lengths);
   
  protected:
diff --git a/gnuradio-core/src/lib/general/gr_stream_to_streams.h b/gnuradio-core/src/lib/general/gr_stream_to_streams.h
index 2fdd39e4a7..905d3c556c 100644
--- a/gnuradio-core/src/lib/general/gr_stream_to_streams.h
+++ b/gnuradio-core/src/lib/general/gr_stream_to_streams.h
@@ -22,12 +22,13 @@
 #ifndef INCLUDED_GR_STREAM_TO_STREAMS_H
 #define INCLUDED_GR_STREAM_TO_STREAMS_H
 
+#include <gr_core_api.h>
 #include <gr_sync_decimator.h>
 
 class gr_stream_to_streams;
 typedef boost::shared_ptr<gr_stream_to_streams> gr_stream_to_streams_sptr;
 
-gr_stream_to_streams_sptr 
+GR_CORE_API gr_stream_to_streams_sptr 
 gr_make_stream_to_streams (size_t item_size, size_t nstreams);
 
 
@@ -38,9 +39,9 @@ gr_make_stream_to_streams (size_t item_size, size_t nstreams);
  * Converts a stream of N items into N streams of 1 item.
  * Repeat ad infinitum.
  */
-class gr_stream_to_streams : public gr_sync_decimator
+class GR_CORE_API gr_stream_to_streams : public gr_sync_decimator
 {
-  friend gr_stream_to_streams_sptr
+  friend GR_CORE_API gr_stream_to_streams_sptr
     gr_make_stream_to_streams (size_t item_size, size_t nstreams);
 
  protected:
diff --git a/gnuradio-core/src/lib/general/gr_stream_to_vector.h b/gnuradio-core/src/lib/general/gr_stream_to_vector.h
index 2cb03f6a87..77272b96bc 100644
--- a/gnuradio-core/src/lib/general/gr_stream_to_vector.h
+++ b/gnuradio-core/src/lib/general/gr_stream_to_vector.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_STREAM_TO_VECTOR_H
 #define INCLUDED_GR_STREAM_TO_VECTOR_H
 
+#include <gr_core_api.h>
 #include <gr_sync_decimator.h>
 
 class gr_stream_to_vector;
 typedef boost::shared_ptr<gr_stream_to_vector> gr_stream_to_vector_sptr;
 
-gr_stream_to_vector_sptr 
+GR_CORE_API gr_stream_to_vector_sptr 
 gr_make_stream_to_vector (size_t item_size, size_t nitems_per_block);
 
 
@@ -36,9 +37,9 @@ gr_make_stream_to_vector (size_t item_size, size_t nitems_per_block);
  * \brief convert a stream of items into a stream of blocks containing nitems_per_block
  * \ingroup slicedice_blk
  */
-class gr_stream_to_vector : public gr_sync_decimator
+class GR_CORE_API gr_stream_to_vector : public gr_sync_decimator
 {
-  friend gr_stream_to_vector_sptr
+  friend GR_CORE_API gr_stream_to_vector_sptr
     gr_make_stream_to_vector (size_t item_size, size_t nitems_per_block);
 
  protected:
diff --git a/gnuradio-core/src/lib/general/gr_streams_to_stream.h b/gnuradio-core/src/lib/general/gr_streams_to_stream.h
index 044af6cd2f..8207fed420 100644
--- a/gnuradio-core/src/lib/general/gr_streams_to_stream.h
+++ b/gnuradio-core/src/lib/general/gr_streams_to_stream.h
@@ -22,12 +22,13 @@
 #ifndef INCLUDED_GR_STREAMS_TO_STREAM_H
 #define INCLUDED_GR_STREAMS_TO_STREAM_H
 
+#include <gr_core_api.h>
 #include <gr_sync_interpolator.h>
 
 class gr_streams_to_stream;
 typedef boost::shared_ptr<gr_streams_to_stream> gr_streams_to_stream_sptr;
 
-gr_streams_to_stream_sptr 
+GR_CORE_API gr_streams_to_stream_sptr 
 gr_make_streams_to_stream (size_t item_size, size_t nstreams);
 
 
@@ -38,9 +39,9 @@ gr_make_streams_to_stream (size_t item_size, size_t nstreams);
  * Convert N streams of 1 item into 1 stream of N items.
  * Repeat ad infinitum.
  */
-class gr_streams_to_stream : public gr_sync_interpolator
+class GR_CORE_API gr_streams_to_stream : public gr_sync_interpolator
 {
-  friend gr_streams_to_stream_sptr
+  friend GR_CORE_API gr_streams_to_stream_sptr
     gr_make_streams_to_stream (size_t item_size, size_t nstreams);
 
  protected:
diff --git a/gnuradio-core/src/lib/general/gr_streams_to_vector.h b/gnuradio-core/src/lib/general/gr_streams_to_vector.h
index 1b2e3ebf79..6a05ac90a2 100644
--- a/gnuradio-core/src/lib/general/gr_streams_to_vector.h
+++ b/gnuradio-core/src/lib/general/gr_streams_to_vector.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_STREAMS_TO_VECTOR_H
 #define INCLUDED_GR_STREAMS_TO_VECTOR_H
 
+#include <gr_core_api.h>
 #include <gr_sync_interpolator.h>
 
 class gr_streams_to_vector;
 typedef boost::shared_ptr<gr_streams_to_vector> gr_streams_to_vector_sptr;
 
-gr_streams_to_vector_sptr 
+GR_CORE_API gr_streams_to_vector_sptr 
 gr_make_streams_to_vector (size_t item_size, size_t nstreams);
 
 
@@ -36,9 +37,9 @@ gr_make_streams_to_vector (size_t item_size, size_t nstreams);
  * \brief convert N streams of items to 1 stream of vector length N
  * \ingroup slicedice_blk
  */
-class gr_streams_to_vector : public gr_sync_block
+class GR_CORE_API gr_streams_to_vector : public gr_sync_block
 {
-  friend gr_streams_to_vector_sptr
+  friend GR_CORE_API gr_streams_to_vector_sptr
     gr_make_streams_to_vector (size_t item_size, size_t nstreams);
 
  protected:
diff --git a/gnuradio-core/src/lib/general/gr_stretch_ff.h b/gnuradio-core/src/lib/general/gr_stretch_ff.h
index e75e1969f3..578634dd8b 100644
--- a/gnuradio-core/src/lib/general/gr_stretch_ff.h
+++ b/gnuradio-core/src/lib/general/gr_stretch_ff.h
@@ -23,6 +23,7 @@
 #ifndef   	INCLUDED_GR_STRETCH_FF_H_
 # define   	INCLUDED_GR_STRETCH_FF_H_
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 /*!
@@ -36,11 +37,11 @@
 class gr_stretch_ff;
 typedef boost::shared_ptr<gr_stretch_ff> gr_stretch_ff_sptr;
 
-gr_stretch_ff_sptr gr_make_stretch_ff(float lo, size_t vlen);
+GR_CORE_API gr_stretch_ff_sptr gr_make_stretch_ff(float lo, size_t vlen);
 
-class gr_stretch_ff : public gr_sync_block
+class GR_CORE_API gr_stretch_ff : public gr_sync_block
 {
-  friend gr_stretch_ff_sptr gr_make_stretch_ff(float lo, size_t vlen);
+  friend GR_CORE_API gr_stretch_ff_sptr gr_make_stretch_ff(float lo, size_t vlen);
 
   float	d_lo;		// the constant
   size_t d_vlen;
diff --git a/gnuradio-core/src/lib/general/gr_test.h b/gnuradio-core/src/lib/general/gr_test.h
index 5438ac701f..78e39d518e 100644
--- a/gnuradio-core/src/lib/general/gr_test.h
+++ b/gnuradio-core/src/lib/general/gr_test.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_TEST_H
 #define INCLUDED_GR_TEST_H
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 #include <string>
 #include "gr_test_types.h"
@@ -31,7 +32,7 @@ class gr_test;
 typedef boost::shared_ptr<gr_test> gr_test_sptr;
 
 // public constructor
-gr_test_sptr gr_make_test (const std::string &name=std::string("gr_test"),
+GR_CORE_API gr_test_sptr gr_make_test (const std::string &name=std::string("gr_test"),
         int min_inputs=1, int max_inputs=1, unsigned int sizeof_input_item=1,
         int min_outputs=1, int max_outputs=1, unsigned int sizeof_output_item=1,
         unsigned int history=1,unsigned int output_multiple=1,double relative_rate=1.0,
@@ -50,7 +51,7 @@ gr_test_sptr gr_make_test (const std::string &name=std::string("gr_test"),
  * The runtime system should detect this and create large enough buffers
  * all through the signal chain.
  */
-class gr_test : public gr_block {
+class GR_CORE_API gr_test : public gr_block {
 
  public:
   
@@ -183,7 +184,7 @@ int general_work (int noutput_items,
 
 
 
-  friend gr_test_sptr gr_make_test (const std::string &name,int min_inputs, int max_inputs, unsigned int sizeof_input_item,
+  friend GR_CORE_API gr_test_sptr gr_make_test (const std::string &name,int min_inputs, int max_inputs, unsigned int sizeof_input_item,
                                    int min_outputs, int max_outputs, unsigned int sizeof_output_item,
                                    unsigned int history,unsigned int output_multiple,double relative_rate,
                                    bool fixed_rate,gr_consume_type_t cons_type, gr_produce_type_t prod_type);
diff --git a/gnuradio-core/src/lib/general/gr_threshold_ff.h b/gnuradio-core/src/lib/general/gr_threshold_ff.h
index 65b677a77e..3bf3058cd2 100644
--- a/gnuradio-core/src/lib/general/gr_threshold_ff.h
+++ b/gnuradio-core/src/lib/general/gr_threshold_ff.h
@@ -23,20 +23,21 @@
 #ifndef INCLUDED_GR_THRESHOLD_FF_H
 #define INCLUDED_GR_THRESHOLD_FF_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_threshold_ff;
 typedef boost::shared_ptr<gr_threshold_ff> gr_threshold_ff_sptr;
 
-gr_threshold_ff_sptr gr_make_threshold_ff (float lo, float hi, float initial_state=0);
+GR_CORE_API gr_threshold_ff_sptr gr_make_threshold_ff (float lo, float hi, float initial_state=0);
 
 /*!
  * \brief Please fix my documentation
  * \ingroup misc_blk
  */
-class gr_threshold_ff : public gr_sync_block
+class GR_CORE_API gr_threshold_ff : public gr_sync_block
 {
-  friend gr_threshold_ff_sptr gr_make_threshold_ff (float lo, float hi, float initial_state);
+  friend GR_CORE_API gr_threshold_ff_sptr gr_make_threshold_ff (float lo, float hi, float initial_state);
 
   float	d_lo,d_hi;		// the constant
   float d_last_state;
diff --git a/gnuradio-core/src/lib/general/gr_throttle.h b/gnuradio-core/src/lib/general/gr_throttle.h
index a82821f776..0b6ada995f 100644
--- a/gnuradio-core/src/lib/general/gr_throttle.h
+++ b/gnuradio-core/src/lib/general/gr_throttle.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_THROTTLE_H
 #define INCLUDED_GR_THROTTLE_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 /*!
@@ -35,7 +36,7 @@
  * controlling the rate of samples.  That should be controlled by a
  * source or sink tied to sample clock.  E.g., a USRP or audio card.
  */
-class gr_throttle : virtual public gr_sync_block
+class GR_CORE_API gr_throttle : virtual public gr_sync_block
 {
 public:
     typedef boost::shared_ptr<gr_throttle> sptr;
@@ -44,6 +45,6 @@ public:
     virtual void set_sample_rate(double rate) = 0;
 };
 
-gr_throttle::sptr gr_make_throttle(size_t itemsize, double samples_per_sec);
+GR_CORE_API gr_throttle::sptr gr_make_throttle(size_t itemsize, double samples_per_sec);
 
 #endif /* INCLUDED_GR_THROTTLE_H */
diff --git a/gnuradio-core/src/lib/general/gr_uchar_to_float.h b/gnuradio-core/src/lib/general/gr_uchar_to_float.h
index 3b83c893fd..8e8836c2c9 100644
--- a/gnuradio-core/src/lib/general/gr_uchar_to_float.h
+++ b/gnuradio-core/src/lib/general/gr_uchar_to_float.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_UCHAR_TO_FLOAT_H
 #define INCLUDED_GR_UCHAR_TO_FLOAT_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_uchar_to_float;
 typedef boost::shared_ptr<gr_uchar_to_float> gr_uchar_to_float_sptr;
 
-gr_uchar_to_float_sptr
+GR_CORE_API gr_uchar_to_float_sptr
 gr_make_uchar_to_float ();
 
 /*!
@@ -36,9 +37,9 @@ gr_make_uchar_to_float ();
  * \ingroup converter_blk
  */
 
-class gr_uchar_to_float : public gr_sync_block
+class GR_CORE_API gr_uchar_to_float : public gr_sync_block
 {
-  friend gr_uchar_to_float_sptr gr_make_uchar_to_float ();
+  friend GR_CORE_API gr_uchar_to_float_sptr gr_make_uchar_to_float ();
   gr_uchar_to_float ();
 
  public:
diff --git a/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.h b/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.h
index e2be2c59ca..056c69dc1a 100644
--- a/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.h
+++ b/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.h
@@ -23,11 +23,12 @@
 #ifndef INCLUDED_GR_UNPACK_K_BITS_BB_H
 #define	INCLUDED_GR_UNPACK_K_BITS_BB_H
 
+#include <gr_core_api.h>
 #include <gr_sync_interpolator.h>
 
 class gr_unpack_k_bits_bb;
 typedef boost::shared_ptr<gr_unpack_k_bits_bb> gr_unpack_k_bits_bb_sptr;
-gr_unpack_k_bits_bb_sptr gr_make_unpack_k_bits_bb (unsigned k);
+GR_CORE_API gr_unpack_k_bits_bb_sptr gr_make_unpack_k_bits_bb (unsigned k);
 
 class gr_unpack_k_bits_bb;
 
@@ -35,10 +36,10 @@ class gr_unpack_k_bits_bb;
  * \brief Converts a byte with k relevent bits to k output bytes with 1 bit in the LSB.
  * \ingroup converter_blk
  */
-class gr_unpack_k_bits_bb : public gr_sync_interpolator
+class GR_CORE_API gr_unpack_k_bits_bb : public gr_sync_interpolator
 {
  private:
-  friend gr_unpack_k_bits_bb_sptr gr_make_unpack_k_bits_bb (unsigned k);
+  friend GR_CORE_API gr_unpack_k_bits_bb_sptr gr_make_unpack_k_bits_bb (unsigned k);
 
   gr_unpack_k_bits_bb (unsigned k);
 
diff --git a/gnuradio-core/src/lib/general/gr_vco_f.h b/gnuradio-core/src/lib/general/gr_vco_f.h
index 2bdf608991..b7524d5813 100644
--- a/gnuradio-core/src/lib/general/gr_vco_f.h
+++ b/gnuradio-core/src/lib/general/gr_vco_f.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_VCO_F_H
 #define INCLUDED_GR_VCO_F_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_fxpt_vco.h>
 
@@ -37,7 +38,7 @@ class gr_vco_f;
 typedef boost::shared_ptr<gr_vco_f> gr_vco_f_sptr;
 
 
-gr_vco_f_sptr gr_make_vco_f(double sampling_rate, double sensitivity, double amplitude);
+GR_CORE_API gr_vco_f_sptr gr_make_vco_f(double sampling_rate, double sensitivity, double amplitude);
 
 /*!
  * \brief VCO - Voltage controlled oscillator
@@ -45,9 +46,9 @@ gr_vco_f_sptr gr_make_vco_f(double sampling_rate, double sensitivity, double amp
  *
  * input: float stream of control voltages; output: float oscillator output
  */
-class gr_vco_f : public gr_sync_block
+class GR_CORE_API gr_vco_f : public gr_sync_block
 {
-  friend gr_vco_f_sptr gr_make_vco_f(double sampling_rate, double sensitivity, double amplitude);
+  friend GR_CORE_API gr_vco_f_sptr gr_make_vco_f(double sampling_rate, double sensitivity, double amplitude);
 
   /*!
    * \brief VCO - Voltage controlled oscillator
diff --git a/gnuradio-core/src/lib/general/gr_vector_to_stream.h b/gnuradio-core/src/lib/general/gr_vector_to_stream.h
index de6cc2a8b9..d2fa8c7ab0 100644
--- a/gnuradio-core/src/lib/general/gr_vector_to_stream.h
+++ b/gnuradio-core/src/lib/general/gr_vector_to_stream.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_VECTOR_TO_STREAM_H
 #define INCLUDED_GR_VECTOR_TO_STREAM_H
 
+#include <gr_core_api.h>
 #include <gr_sync_interpolator.h>
 
 class gr_vector_to_stream;
 typedef boost::shared_ptr<gr_vector_to_stream> gr_vector_to_stream_sptr;
 
-gr_vector_to_stream_sptr 
+GR_CORE_API gr_vector_to_stream_sptr 
 gr_make_vector_to_stream (size_t item_size, size_t nitems_per_block);
 
 
@@ -36,9 +37,9 @@ gr_make_vector_to_stream (size_t item_size, size_t nitems_per_block);
  * \brief convert a stream of blocks of nitems_per_block items into a stream of items
  * \ingroup slicedice_blk
  */
-class gr_vector_to_stream : public gr_sync_interpolator
+class GR_CORE_API gr_vector_to_stream : public gr_sync_interpolator
 {
-  friend gr_vector_to_stream_sptr
+  friend GR_CORE_API gr_vector_to_stream_sptr
     gr_make_vector_to_stream (size_t item_size, size_t nitems_per_block);
 
  protected:
diff --git a/gnuradio-core/src/lib/general/gr_vector_to_streams.h b/gnuradio-core/src/lib/general/gr_vector_to_streams.h
index d5ba7acf94..04ac941a10 100644
--- a/gnuradio-core/src/lib/general/gr_vector_to_streams.h
+++ b/gnuradio-core/src/lib/general/gr_vector_to_streams.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_VECTOR_TO_STREAMS_H
 #define INCLUDED_GR_VECTOR_TO_STREAMS_H
 
+#include <gr_core_api.h>
 #include <gr_sync_interpolator.h>
 
 class gr_vector_to_streams;
 typedef boost::shared_ptr<gr_vector_to_streams> gr_vector_to_streams_sptr;
 
-gr_vector_to_streams_sptr 
+GR_CORE_API gr_vector_to_streams_sptr 
 gr_make_vector_to_streams (size_t item_size, size_t nstreams);
 
 
@@ -36,9 +37,9 @@ gr_make_vector_to_streams (size_t item_size, size_t nstreams);
  * \brief Convert 1 stream of vectors of length N to N streams of items
  * \ingroup slicedice_blk
  */
-class gr_vector_to_streams : public gr_sync_block
+class GR_CORE_API gr_vector_to_streams : public gr_sync_block
 {
-  friend gr_vector_to_streams_sptr
+  friend GR_CORE_API gr_vector_to_streams_sptr
     gr_make_vector_to_streams (size_t item_size, size_t nstreams);
 
  protected:
diff --git a/gnuradio-core/src/lib/general/gr_wavelet_ff.h b/gnuradio-core/src/lib/general/gr_wavelet_ff.h
index dcfb595e50..107a50fe27 100644
--- a/gnuradio-core/src/lib/general/gr_wavelet_ff.h
+++ b/gnuradio-core/src/lib/general/gr_wavelet_ff.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_WAVELET_FF_H
 #define INCLUDED_GR_WAVELET_FF_H
 
+#include <gr_core_api.h>
 #include <iostream>
 #include <gr_sync_block.h>
 
@@ -31,7 +32,7 @@
 class gr_wavelet_ff;
 typedef boost::shared_ptr<gr_wavelet_ff> gr_wavelet_ff_sptr;
 
-gr_wavelet_ff_sptr
+GR_CORE_API gr_wavelet_ff_sptr
 gr_make_wavelet_ff(int size = 1024,
 		   int order = 20,
 		   bool forward = true);
@@ -41,7 +42,7 @@ gr_make_wavelet_ff(int size = 1024,
  * \ingroup wavelet_blk
  */
 
-class gr_wavelet_ff : public gr_sync_block
+class GR_CORE_API gr_wavelet_ff : public gr_sync_block
 {
   int                    d_size;
   int                    d_order;
@@ -50,7 +51,7 @@ class gr_wavelet_ff : public gr_sync_block
   gsl_wavelet_workspace *d_workspace;
   double                *d_temp;
 
-  friend gr_wavelet_ff_sptr
+  friend GR_CORE_API gr_wavelet_ff_sptr
     gr_make_wavelet_ff(int size,
 		       int order,
 		       bool forward);
diff --git a/gnuradio-core/src/lib/general/gr_wvps_ff.h b/gnuradio-core/src/lib/general/gr_wvps_ff.h
index af122d0fcf..7c8f260665 100644
--- a/gnuradio-core/src/lib/general/gr_wvps_ff.h
+++ b/gnuradio-core/src/lib/general/gr_wvps_ff.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_WVPS_FF_H
 #define INCLUDED_GR_WVPS_FF_H
 
+#include <gr_core_api.h>
 #include <gr_sync_decimator.h>
 
 class gr_wvps_ff;
 typedef boost::shared_ptr<gr_wvps_ff> gr_wvps_ff_sptr;
 
-gr_wvps_ff_sptr 
+GR_CORE_API gr_wvps_ff_sptr 
 gr_make_wvps_ff(int ilen);
 
 
@@ -36,9 +37,9 @@ gr_make_wvps_ff(int ilen);
  * \brief computes the Wavelet Power Spectrum from a set of wavelet coefficients
  * \ingroup wavelet_blk
  */
-class gr_wvps_ff : public gr_sync_block
+class GR_CORE_API gr_wvps_ff : public gr_sync_block
 {
-  friend gr_wvps_ff_sptr
+  friend GR_CORE_API gr_wvps_ff_sptr
   gr_make_wvps_ff(int ilen);
 
   int d_ilen;
diff --git a/gnuradio-core/src/lib/general/gri_agc2_cc.h b/gnuradio-core/src/lib/general/gri_agc2_cc.h
index 441d1e4595..b0a027aad3 100644
--- a/gnuradio-core/src/lib/general/gri_agc2_cc.h
+++ b/gnuradio-core/src/lib/general/gri_agc2_cc.h
@@ -23,6 +23,7 @@
 #ifndef _GRI_AGC2_CC_H_
 #define _GRI_AGC2_CC_H_
 
+#include <gr_core_api.h>
 #include <math.h>
 
 /*!
@@ -30,7 +31,7 @@
  *
  * For Power the absolute value of the complex number is used.
  */
-class gri_agc2_cc {
+class GR_CORE_API gri_agc2_cc {
 
  public:
   gri_agc2_cc (float attack_rate = 1e-1, float decay_rate = 1e-2, float reference = 1.0, 
diff --git a/gnuradio-core/src/lib/general/gri_agc2_ff.h b/gnuradio-core/src/lib/general/gri_agc2_ff.h
index a06dab78c9..ee70c25374 100644
--- a/gnuradio-core/src/lib/general/gri_agc2_ff.h
+++ b/gnuradio-core/src/lib/general/gri_agc2_ff.h
@@ -23,6 +23,7 @@
 #ifndef _GRI_AGC2_FF_H_
 #define _GRI_AGC2_FF_H_
 
+#include <gr_core_api.h>
 #include <math.h>
 
 /*!
@@ -31,7 +32,7 @@
  * Power is approximated by absolute value
  */
 
-class gri_agc2_ff {
+class GR_CORE_API gri_agc2_ff {
 
  public:
   gri_agc2_ff (float attack_rate = 1e-1, float decay_rate = 1e-2, float reference = 1.0, 
diff --git a/gnuradio-core/src/lib/general/gri_agc_cc.h b/gnuradio-core/src/lib/general/gri_agc_cc.h
index bc31d9a3d2..74dfdf1dcf 100644
--- a/gnuradio-core/src/lib/general/gri_agc_cc.h
+++ b/gnuradio-core/src/lib/general/gri_agc_cc.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GRI_AGC_CC_H
 #define INCLUDED_GRI_AGC_CC_H
 
+#include <gr_core_api.h>
 #include <math.h>
 
 /*!
@@ -31,7 +32,7 @@
  * For Power the absolute value of the complex number is used.
  */
 
-class gri_agc_cc {
+class GR_CORE_API gri_agc_cc {
 
  public:
   gri_agc_cc (float rate = 1e-4, float reference = 1.0, 
diff --git a/gnuradio-core/src/lib/general/gri_agc_ff.h b/gnuradio-core/src/lib/general/gri_agc_ff.h
index de609a8d40..753bbe2756 100644
--- a/gnuradio-core/src/lib/general/gri_agc_ff.h
+++ b/gnuradio-core/src/lib/general/gri_agc_ff.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GRI_AGC_FF_H
 #define INCLUDED_GRI_AGC_FF_H
 
+#include <gr_core_api.h>
 #include <math.h>
 
 /*!
@@ -30,7 +31,7 @@
  *
  * Power is approximated by absolute value
  */
-class gri_agc_ff {
+class GR_CORE_API gri_agc_ff {
 
  public:
   gri_agc_ff (float rate = 1e-4, float reference = 1.0,
diff --git a/gnuradio-core/src/lib/general/gri_char_to_float.h b/gnuradio-core/src/lib/general/gri_char_to_float.h
index f4703bef75..890d482b5d 100644
--- a/gnuradio-core/src/lib/general/gri_char_to_float.h
+++ b/gnuradio-core/src/lib/general/gri_char_to_float.h
@@ -23,10 +23,12 @@
 #ifndef INCLUDED_GRI_CHAR_TO_FLOAT_H
 #define INCLUDED_GRI_CHAR_TO_FLOAT_H
 
+#include <gr_core_api.h>
+
 /*
  * convert array of chars to floats
  */
-void gri_char_to_float (const char *in, float *out, int nsamples);
+GR_CORE_API void gri_char_to_float (const char *in, float *out, int nsamples);
 
 
-#endif /* INCLUDED_GRI_CHAR_TO_FLOAT_H */
+#endif /* INCLUDED_GRI_CHAR_TO_FLOAT_H */
\ No newline at end of file
diff --git a/gnuradio-core/src/lib/general/gri_debugger_hook.h b/gnuradio-core/src/lib/general/gri_debugger_hook.h
index 60c90685e5..cf227af8f0 100644
--- a/gnuradio-core/src/lib/general/gri_debugger_hook.h
+++ b/gnuradio-core/src/lib/general/gri_debugger_hook.h
@@ -23,6 +23,8 @@
 #ifndef INCLUDED_GRI_DEBUGGER_HOOK_H
 #define INCLUDED_GRI_DEBUGGER_HOOK_H
 
-void gri_debugger_hook ();
+#include <gr_core_api.h>
 
-#endif /* INCLUDED_GRI_DEBUGGER_HOOK_H */
+GR_CORE_API void gri_debugger_hook ();
+
+#endif /* INCLUDED_GRI_DEBUGGER_HOOK_H */
\ No newline at end of file
diff --git a/gnuradio-core/src/lib/general/gri_fft.h b/gnuradio-core/src/lib/general/gri_fft.h
index 9ffcc5a508..91a82fb55a 100644
--- a/gnuradio-core/src/lib/general/gri_fft.h
+++ b/gnuradio-core/src/lib/general/gri_fft.h
@@ -26,6 +26,7 @@
  * Wrappers for FFTW single precision 1d dft
  */
 
+#include <gr_core_api.h>
 #include <gr_complex.h>
 #include <boost/thread.hpp>
 
@@ -33,7 +34,7 @@
  * \brief Export reference to planner mutex for those apps that
  * want to use FFTW w/o using the gri_fftw* classes.
  */
-class gri_fft_planner {
+class GR_CORE_API gri_fft_planner {
 public:
   typedef boost::mutex::scoped_lock scoped_lock;
   /*!
@@ -46,7 +47,7 @@ public:
  * \brief FFT: complex in, complex out
  * \ingroup misc
  */
-class gri_fft_complex {
+class GR_CORE_API gri_fft_complex {
   int	      d_fft_size;
   gr_complex *d_inbuf;
   gr_complex *d_outbuf;
@@ -77,7 +78,7 @@ public:
  * \brief FFT: real in, complex out
  * \ingroup misc
  */
-class gri_fft_real_fwd {
+class GR_CORE_API gri_fft_real_fwd {
   int	      d_fft_size;
   float	     *d_inbuf;
   gr_complex *d_outbuf;
@@ -108,7 +109,7 @@ public:
  * \brief FFT: complex in, float out
  * \ingroup misc
  */
-class gri_fft_real_rev {
+class GR_CORE_API gri_fft_real_rev {
   int	      d_fft_size;
   gr_complex *d_inbuf;
   float	     *d_outbuf;
diff --git a/gnuradio-core/src/lib/general/gri_float_to_char.h b/gnuradio-core/src/lib/general/gri_float_to_char.h
index 95cc8ea8dc..184592a692 100644
--- a/gnuradio-core/src/lib/general/gri_float_to_char.h
+++ b/gnuradio-core/src/lib/general/gri_float_to_char.h
@@ -23,10 +23,11 @@
 #ifndef INCLUDED_GRI_FLOAT_TO_CHAR_H
 #define INCLUDED_GRI_FLOAT_TO_CHAR_H
 
+#include <gr_core_api.h>
+
 /*!
  * convert array of floats to chars with rounding and saturation.
  */
-void gri_float_to_char (const float *in, char *out, int nsamples);
+GR_CORE_API void gri_float_to_char (const float *in, char *out, int nsamples);
 
 #endif /* INCLUDED_GRI_FLOAT_TO_CHAR_H */
-
diff --git a/gnuradio-core/src/lib/general/gri_float_to_short.h b/gnuradio-core/src/lib/general/gri_float_to_short.h
index e36e25de65..6d814b2b37 100644
--- a/gnuradio-core/src/lib/general/gri_float_to_short.h
+++ b/gnuradio-core/src/lib/general/gri_float_to_short.h
@@ -23,10 +23,11 @@
 #ifndef INCLUDED_GRI_FLOAT_TO_SHORT_H
 #define INCLUDED_GRI_FLOAT_TO_SHORT_H
 
+#include <gr_core_api.h>
+
 /*!
  * convert array of floats to shorts with rounding and saturation.
  */
-void gri_float_to_short (const float *in, short *out, int nsamples);
+GR_CORE_API void gri_float_to_short (const float *in, short *out, int nsamples);
 
 #endif /* INCLUDED_GRI_FLOAT_TO_SHORT_H */
-
diff --git a/gnuradio-core/src/lib/general/gri_float_to_uchar.h b/gnuradio-core/src/lib/general/gri_float_to_uchar.h
index e413e725f3..ff549333e5 100644
--- a/gnuradio-core/src/lib/general/gri_float_to_uchar.h
+++ b/gnuradio-core/src/lib/general/gri_float_to_uchar.h
@@ -23,10 +23,11 @@
 #ifndef INCLUDED_GRI_FLOAT_TO_UCHAR_H
 #define INCLUDED_GRI_FLOAT_TO_UCHAR_H
 
+#include <gr_core_api.h>
+
 /*!
  * convert array of floats to unsigned chars with rounding and saturation.
  */
-void gri_float_to_uchar (const float *in, unsigned char *out, int nsamples);
+GR_CORE_API void gri_float_to_uchar (const float *in, unsigned char *out, int nsamples);
 
 #endif /* INCLUDED_GRI_FLOAT_TO_UCHAR_H */
-
diff --git a/gnuradio-core/src/lib/general/gri_glfsr.h b/gnuradio-core/src/lib/general/gri_glfsr.h
index 7dd5f8660e..e6d28cf456 100644
--- a/gnuradio-core/src/lib/general/gri_glfsr.h
+++ b/gnuradio-core/src/lib/general/gri_glfsr.h
@@ -23,6 +23,8 @@
 #ifndef INCLUDED_GRI_GLFSR_H
 #define INCLUDED_GRI_GLFSR_H
 
+#include <gr_core_api.h>
+
 /*!
  * \brief Galois Linear Feedback Shift Register using specified polynomial mask
  * \ingroup misc
@@ -30,7 +32,7 @@
  * Generates a maximal length pseudo-random sequence of length 2^degree-1
  */
 
-class gri_glfsr
+class GR_CORE_API gri_glfsr
 {
  private:
   int d_shift_register;
@@ -52,4 +54,4 @@ class gri_glfsr
   int mask() const { return d_mask; }
 };
 
-#endif /* INCLUDED_GRI_GLFSR_H */
+#endif /* INCLUDED_GRI_GLFSR_H */
\ No newline at end of file
diff --git a/gnuradio-core/src/lib/general/gri_interleaved_short_to_complex.h b/gnuradio-core/src/lib/general/gri_interleaved_short_to_complex.h
index 09d915f7a8..107e2f7782 100644
--- a/gnuradio-core/src/lib/general/gri_interleaved_short_to_complex.h
+++ b/gnuradio-core/src/lib/general/gri_interleaved_short_to_complex.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GRI_INTERLEAVED_SHORT_TO_COMPLEX_H
 #define INCLUDED_GRI_INTERLEAVED_SHORT_TO_COMPLEX_H
 
+#include <gr_core_api.h>
 #include <gr_complex.h>
 
 /*
@@ -30,7 +31,7 @@
  * the shorts contains real, imaginary, real, imaginary...
  * nsamples is the number of shorts; it must be even.
  */
-void gri_interleaved_short_to_complex (const short *in, gr_complex *out, int nsamples);
+GR_CORE_API void gri_interleaved_short_to_complex (const short *in, gr_complex *out, int nsamples);
 
 #endif /* INCLUDED_GRI_INTERLEAVED_SHORT_TO_COMPLEX_H */
 
diff --git a/gnuradio-core/src/lib/general/gri_lfsr.h b/gnuradio-core/src/lib/general/gri_lfsr.h
index f691e36ecb..dc9358572b 100644
--- a/gnuradio-core/src/lib/general/gri_lfsr.h
+++ b/gnuradio-core/src/lib/general/gri_lfsr.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GRI_LFSR_H
 #define INCLUDED_GRI_LFSR_H
 
+#include <gr_core_api.h>
 #include <stdexcept>
 #include <stdint.h>
 
@@ -81,7 +82,7 @@
  *
  */
 
-class gri_lfsr
+class GR_CORE_API gri_lfsr
 {
  private:
   uint32_t d_shift_register;
diff --git a/gnuradio-core/src/lib/general/gri_lfsr_15_1_0.h b/gnuradio-core/src/lib/general/gri_lfsr_15_1_0.h
index 798f2faad7..7405ffbaaf 100644
--- a/gnuradio-core/src/lib/general/gri_lfsr_15_1_0.h
+++ b/gnuradio-core/src/lib/general/gri_lfsr_15_1_0.h
@@ -23,6 +23,8 @@
 #ifndef INCLUDED_GRI_LFSR_15_1_0_H
 #define INCLUDED_GRI_LFSR_15_1_0_H
 
+#include <gr_core_api.h>
+
 /*!
  * \brief Linear Feedback Shift Register using primitive polynomial x^15 + x + 1
  * \ingroup misc
@@ -30,7 +32,7 @@
  * Generates a maximal length pseudo-random sequence of length 2^15 - 1 bits.
  */
 
-class gri_lfsr_15_1_0 {
+class GR_CORE_API gri_lfsr_15_1_0 {
   unsigned long	d_sr;		// shift register
 
  public:
@@ -55,4 +57,4 @@ class gri_lfsr_15_1_0 {
   }
 };
 
-#endif /* INCLUDED_GRI_LFSR_15_1_0_H */
+#endif /* INCLUDED_GRI_LFSR_15_1_0_H */
\ No newline at end of file
diff --git a/gnuradio-core/src/lib/general/gri_lfsr_32k.h b/gnuradio-core/src/lib/general/gri_lfsr_32k.h
index 33e7ae3a1b..5c0396b50c 100644
--- a/gnuradio-core/src/lib/general/gri_lfsr_32k.h
+++ b/gnuradio-core/src/lib/general/gri_lfsr_32k.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GRI_LFSR_32k_H
 #define INCLUDED_GRI_LFSR_32k_H
 
+#include <gr_core_api.h>
 #include <gri_lfsr_15_1_0.h>
 
 /*!
@@ -33,7 +34,7 @@
  * of the sequence.
  */
 
-class gri_lfsr_32k {
+class GR_CORE_API gri_lfsr_32k {
   gri_lfsr_15_1_0	d_lfsr;
   unsigned int		d_count;
 
diff --git a/gnuradio-core/src/lib/general/gri_short_to_float.h b/gnuradio-core/src/lib/general/gri_short_to_float.h
index ce41930624..51767efab1 100644
--- a/gnuradio-core/src/lib/general/gri_short_to_float.h
+++ b/gnuradio-core/src/lib/general/gri_short_to_float.h
@@ -23,10 +23,12 @@
 #ifndef INCLUDED_GRI_SHORT_TO_FLOAT_H
 #define INCLUDED_GRI_SHORT_TO_FLOAT_H
 
+#include <gr_core_api.h>
+
 /*
  * convert array of shorts to floats
  */
-void gri_short_to_float (const short *in, float *out, int nsamples);
+GR_CORE_API void gri_short_to_float (const short *in, float *out, int nsamples);
 
 
-#endif /* INCLUDED_GRI_SHORT_TO_FLOAT_H */
+#endif /* INCLUDED_GRI_SHORT_TO_FLOAT_H */
\ No newline at end of file
diff --git a/gnuradio-core/src/lib/general/gri_uchar_to_float.h b/gnuradio-core/src/lib/general/gri_uchar_to_float.h
index 7a9f11ba63..9f342989d2 100644
--- a/gnuradio-core/src/lib/general/gri_uchar_to_float.h
+++ b/gnuradio-core/src/lib/general/gri_uchar_to_float.h
@@ -23,10 +23,12 @@
 #ifndef INCLUDED_GRI_UCHAR_TO_FLOAT_H
 #define INCLUDED_GRI_UCHAR_TO_FLOAT_H
 
+#include <gr_core_api.h>
+
 /*
  * convert array of unsigned chars to floats
  */
-void gri_uchar_to_float (const unsigned char *in, float *out, int nsamples);
+GR_CORE_API void gri_uchar_to_float (const unsigned char *in, float *out, int nsamples);
 
 
-#endif /* INCLUDED_GRI_UCHAR_TO_FLOAT_H */
+#endif /* INCLUDED_GRI_UCHAR_TO_FLOAT_H */
\ No newline at end of file
diff --git a/gnuradio-core/src/lib/general/malloc16.h b/gnuradio-core/src/lib/general/malloc16.h
index fc97f267d2..6b1a3fb08f 100644
--- a/gnuradio-core/src/lib/general/malloc16.h
+++ b/gnuradio-core/src/lib/general/malloc16.h
@@ -20,15 +20,17 @@
  * Boston, MA 02110-1301, USA.
  */
 
+#include <gr_core_api.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 #include <stdlib.h>
 
-void *malloc16Align(int size);
-void *calloc16Align(size_t nmemb,size_t size);
-void free16Align(void *p);
+GR_CORE_API void *malloc16Align(int size);
+GR_CORE_API void *calloc16Align(size_t nmemb,size_t size);
+GR_CORE_API void free16Align(void *p);
 
 #ifdef __cplusplus
 }
diff --git a/gnuradio-core/src/lib/general/qa_general.h b/gnuradio-core/src/lib/general/qa_general.h
index 577c9d7fb9..7da1882666 100644
--- a/gnuradio-core/src/lib/general/qa_general.h
+++ b/gnuradio-core/src/lib/general/qa_general.h
@@ -23,11 +23,12 @@
 #ifndef _QA_GENERAL_H_
 #define _QA_GENERAL_H_
 
+#include <gruel/attributes.h>
 #include <cppunit/TestSuite.h>
 
 //! collect all the tests for the gr directory
 
-class qa_general {
+class __GR_ATTR_EXPORT qa_general {
  public:
   //! return suite of tests for all of gr directory
   static CppUnit::TestSuite *suite ();
diff --git a/gnuradio-core/src/lib/gengen/gr_add_XX.h.t b/gnuradio-core/src/lib/gengen/gr_add_XX.h.t
index 91dd9196ae..f0e857abf9 100644
--- a/gnuradio-core/src/lib/gengen/gr_add_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_add_XX.h.t
@@ -25,12 +25,13 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1);
 
 /*!
  * \brief output = sum (input_0, input_1, ...)
@@ -38,9 +39,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
  *
  * Add across all input streams.
  */
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
 {
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
 
   @NAME@ (size_t vlen);
 
diff --git a/gnuradio-core/src/lib/gengen/gr_add_const_XX.h.t b/gnuradio-core/src/lib/gengen/gr_add_const_XX.h.t
index 8e98841046..5b46d0f89b 100644
--- a/gnuradio-core/src/lib/gengen/gr_add_const_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_add_const_XX.h.t
@@ -25,20 +25,21 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
 
 /*!
  * \brief output = input + constant
  * \ingroup math_blk
  */
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
 {
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
 
   @O_TYPE@	d_k;		// the constant
   @NAME@ (@O_TYPE@ k);
diff --git a/gnuradio-core/src/lib/gengen/gr_add_const_vXX.h.t b/gnuradio-core/src/lib/gengen/gr_add_const_vXX.h.t
old mode 100755
new mode 100644
index 574fc686ca..9d986e960f
--- a/gnuradio-core/src/lib/gengen/gr_add_const_vXX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_add_const_vXX.h.t
@@ -25,20 +25,21 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k);
 
 /*!
  * \brief output vector = input vector + constant vector
  * \ingroup math_blk
  */
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
 {
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k);
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k);
 
   std::vector<@I_TYPE@> d_k; // the constant
   @NAME@ (const std::vector<@I_TYPE@> &k);
diff --git a/gnuradio-core/src/lib/gengen/gr_and_XX.h.t b/gnuradio-core/src/lib/gengen/gr_and_XX.h.t
index 6152942dda..dbb2259074 100644
--- a/gnuradio-core/src/lib/gengen/gr_and_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_and_XX.h.t
@@ -25,12 +25,13 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ ();
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
 
 /*!
  * \brief output = input_0 & input_1 & , ... & input_N)
@@ -38,9 +39,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
  *
  * bitwise boolean and across all input streams.
  */
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
 {
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ ();
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
 
   @NAME@ ();
 
diff --git a/gnuradio-core/src/lib/gengen/gr_and_const_XX.h.t b/gnuradio-core/src/lib/gengen/gr_and_const_XX.h.t
index 3119611f15..ceffc3066c 100644
--- a/gnuradio-core/src/lib/gengen/gr_and_const_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_and_const_XX.h.t
@@ -25,12 +25,13 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
 
 /*!
  * \brief output_N = input_N & value
@@ -38,9 +39,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
  *
  * bitwise boolean and of const to the data stream.
  */
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
 {
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
 
   @O_TYPE@	d_k;		// the constant
   @NAME@ (@O_TYPE@ k);
diff --git a/gnuradio-core/src/lib/gengen/gr_argmax_XX.h.t b/gnuradio-core/src/lib/gengen/gr_argmax_XX.h.t
index 2aba94d712..437fa5735f 100644
--- a/gnuradio-core/src/lib/gengen/gr_argmax_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_argmax_XX.h.t
@@ -25,17 +25,18 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
 
 
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
 {
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
 
   @NAME@ (size_t vlen);
   size_t d_vlen;
diff --git a/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_XX.h.t b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_XX.h.t
index a5313d07d0..c1393df3f2 100644
--- a/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_XX.h.t
@@ -25,12 +25,13 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_interpolator.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@O_TYPE@> &symbol_table, const int D = 1);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@O_TYPE@> &symbol_table, const int D = 1);
 
 /*!
  * \brief Map a stream of symbol indexes (unpacked bytes or shorts) to stream of float or complex onstellation points.in \p D dimensions (\p D = 1 by default)
@@ -51,9 +52,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
  * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc.
  */
 
-class @NAME@ : public gr_sync_interpolator
+class GR_CORE_API @NAME@ : public gr_sync_interpolator
 {
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@O_TYPE@> &symbol_table, const int D);
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@O_TYPE@> &symbol_table, const int D);
 
   int d_D;
   std::vector<@O_TYPE@> d_symbol_table;
diff --git a/gnuradio-core/src/lib/gengen/gr_divide_XX.h.t b/gnuradio-core/src/lib/gengen/gr_divide_XX.h.t
index a59497c8ca..ebe5ff5e50 100644
--- a/gnuradio-core/src/lib/gengen/gr_divide_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_divide_XX.h.t
@@ -25,12 +25,13 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1);
 
 /*!
  * \brief output = input_0 / input_1 / input_x ...)
@@ -38,9 +39,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
  *
  * Divide across all input streams.
  */
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
 {
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
 
   @NAME@ (size_t vlen);
 
diff --git a/gnuradio-core/src/lib/gengen/gr_integrate_XX.h.t b/gnuradio-core/src/lib/gengen/gr_integrate_XX.h.t
index 01061ff21f..c1d81000fe 100644
--- a/gnuradio-core/src/lib/gengen/gr_integrate_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_integrate_XX.h.t
@@ -25,13 +25,14 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_decimator.h>
 
 class @NAME@;
 
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ (int decim);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (int decim);
 
 /*!
  * \brief output = sum(input[0]...input[n])
@@ -39,10 +40,10 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
  *
  * Integrate successive samples in input stream and decimate
  */
-class @NAME@ : public gr_sync_decimator
+class GR_CORE_API @NAME@ : public gr_sync_decimator
 {
 private:
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@(int decim);
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@(int decim);
 
   @NAME@ (int decim);
 
diff --git a/gnuradio-core/src/lib/gengen/gr_max_XX.h.t b/gnuradio-core/src/lib/gengen/gr_max_XX.h.t
index 2aba94d712..437fa5735f 100644
--- a/gnuradio-core/src/lib/gengen/gr_max_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_max_XX.h.t
@@ -25,17 +25,18 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
 
 
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
 {
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
 
   @NAME@ (size_t vlen);
   size_t d_vlen;
diff --git a/gnuradio-core/src/lib/gengen/gr_moving_average_XX.h.t b/gnuradio-core/src/lib/gengen/gr_moving_average_XX.h.t
index 2441ca65ba..7e228abb69 100644
--- a/gnuradio-core/src/lib/gengen/gr_moving_average_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_moving_average_XX.h.t
@@ -25,13 +25,14 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ (int length, @O_TYPE@ scale, int max_iter = 4096);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (int length, @O_TYPE@ scale, int max_iter = 4096);
 
 /*!
  * \brief output is the moving sum of the last N samples, scaled by the scale factor
@@ -40,10 +41,10 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
  * max_iter limits how long we go without flushing the accumulator
  * This is necessary to avoid numerical instability for float and complex.
  */
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
 {
 private:
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@(int length, @O_TYPE@ scale, int max_iter);
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@(int length, @O_TYPE@ scale, int max_iter);
 
   @NAME@ (int length, @O_TYPE@ scale, int max_iter = 4096);
 
diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_XX.h.t b/gnuradio-core/src/lib/gengen/gr_multiply_XX.h.t
index cb4a0273d6..1feb162022 100644
--- a/gnuradio-core/src/lib/gengen/gr_multiply_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_multiply_XX.h.t
@@ -25,12 +25,13 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1);
 
 /*!
  * \brief output = prod (input_0, input_1, ...)
@@ -38,9 +39,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
  *
  * Multiply across all input streams.
  */
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
 {
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
 
   @NAME@ (size_t vlen);
 
diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_const_XX.h.t b/gnuradio-core/src/lib/gengen/gr_multiply_const_XX.h.t
index 0c10185cc3..6ff6f74a93 100644
--- a/gnuradio-core/src/lib/gengen/gr_multiply_const_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_multiply_const_XX.h.t
@@ -25,20 +25,21 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
 
 /*!
  * \brief output = input * constant
  * \ingroup math_blk
  */
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
 {
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k);
 
   @O_TYPE@	d_k;		// the constant
   @NAME@ (@O_TYPE@ k);
diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.h.t b/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.h.t
old mode 100755
new mode 100644
index 81e781895d..f696ab7b10
--- a/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.h.t
@@ -25,20 +25,21 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k);
 
 /*!
  * \brief output vector = input vector * constant vector (element-wise)
  * \ingroup math_blk
  */
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
 {
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k);
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> &k);
 
   std::vector<@I_TYPE@> d_k; // the constant
   @NAME@ (const std::vector<@I_TYPE@> &k);
diff --git a/gnuradio-core/src/lib/gengen/gr_mute_XX.h.t b/gnuradio-core/src/lib/gengen/gr_mute_XX.h.t
index 5007787c41..ccf966e53a 100644
--- a/gnuradio-core/src/lib/gengen/gr_mute_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_mute_XX.h.t
@@ -25,20 +25,21 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ (bool mute=false);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (bool mute=false);
 
 /*!
  * \brief output = input or zero if muted.
  * \ingroup level_blk
  */
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
 {
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ (bool mute);
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (bool mute);
 
   bool		d_mute;
   @NAME@ (bool mute);
diff --git a/gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t b/gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t
index a920ce04a0..9dd92c8f51 100644
--- a/gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t
@@ -25,6 +25,7 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_noise_type.h>
 #include <gr_random.h>
@@ -33,15 +34,15 @@
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @NAME@_sptr;
 
-@NAME@_sptr 
+GR_CORE_API @NAME@_sptr 
 gr_make_@BASE_NAME@ (gr_noise_type_t type, float ampl, long seed = 3021);
 
 /*!
  * \brief random number source
  * \ingroup source_blk
  */
-class @NAME@ : public gr_sync_block {
-  friend @NAME@_sptr 
+class GR_CORE_API @NAME@ : public gr_sync_block {
+  friend GR_CORE_API @NAME@_sptr 
   gr_make_@BASE_NAME@ (gr_noise_type_t type, float ampl, long seed);
 
   gr_noise_type_t	d_type;
diff --git a/gnuradio-core/src/lib/gengen/gr_not_XX.h.t b/gnuradio-core/src/lib/gengen/gr_not_XX.h.t
index cf8d96ede8..b946ffc425 100644
--- a/gnuradio-core/src/lib/gengen/gr_not_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_not_XX.h.t
@@ -25,12 +25,13 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ ();
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
 
 /*!
  * \brief output = ~input_0 
@@ -38,9 +39,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
  *
  * bitwise boolean not across input stream.
  */
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
 {
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ ();
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
 
   @NAME@ ();
 
diff --git a/gnuradio-core/src/lib/gengen/gr_or_XX.h.t b/gnuradio-core/src/lib/gengen/gr_or_XX.h.t
index 3e02d9b1a2..8d1fea9510 100644
--- a/gnuradio-core/src/lib/gengen/gr_or_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_or_XX.h.t
@@ -25,12 +25,13 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ ();
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
 
 /*!
  * \brief output = input_0 | input_1 | , ... | input_N)
@@ -38,9 +39,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
  *
  * bitwise boolean or across all input streams.
  */
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
 {
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ ();
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
 
   @NAME@ ();
 
diff --git a/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_XX.h.t b/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_XX.h.t
index 803098c0dc..77cd2b4703 100644
--- a/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_XX.h.t
@@ -25,13 +25,14 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 #include <gr_endianness.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ 
+GR_CORE_API @SPTR_NAME@ 
 gr_make_@BASE_NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness);
 
 /*!
@@ -59,9 +60,9 @@ gr_make_@BASE_NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness);
  * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc.
  */
 
-class @NAME@ : public gr_block
+class GR_CORE_API @NAME@ : public gr_block
 {
-  friend @SPTR_NAME@ 
+  friend GR_CORE_API @SPTR_NAME@ 
   gr_make_@BASE_NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness);
 
   @NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness);
diff --git a/gnuradio-core/src/lib/gengen/gr_peak_detector_XX.h.t b/gnuradio-core/src/lib/gengen/gr_peak_detector_XX.h.t
index d6a8caf76d..d6d1e5e514 100644
--- a/gnuradio-core/src/lib/gengen/gr_peak_detector_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_peak_detector_XX.h.t
@@ -25,12 +25,13 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ (float threshold_factor_rise = 0.25,
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (float threshold_factor_rise = 0.25,
 				 float threshold_factor_fall = 0.40,
 				 int look_ahead = 10,
 				 float alpha = 0.001);
@@ -57,9 +58,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
  *        This look-ahead range.
  * \param alpha The gain value of a moving average filter
  */
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
 {
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ (float threshold_factor_rise,
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (float threshold_factor_rise,
 					  float threshold_factor_fall,
 					  int look_ahead, float alpha);
 
diff --git a/gnuradio-core/src/lib/gengen/gr_sample_and_hold_XX.h.t b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_XX.h.t
index b96487326c..328c471063 100644
--- a/gnuradio-core/src/lib/gengen/gr_sample_and_hold_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_XX.h.t
@@ -25,12 +25,13 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ ();
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
 
 /*!
  * \brief sample and hold circuit
@@ -39,9 +40,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
  * Samples the data stream (input stream 0) and holds the value
  * if the control signal is 1 (intput stream 1).
  */
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
 {
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ ();
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
 
   @NAME@ ();
 
diff --git a/gnuradio-core/src/lib/gengen/gr_sig_source_X.h.t b/gnuradio-core/src/lib/gengen/gr_sig_source_X.h.t
index 9906d16ab4..3df7238684 100644
--- a/gnuradio-core/src/lib/gengen/gr_sig_source_X.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_sig_source_X.h.t
@@ -25,6 +25,7 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_sig_source_waveform.h>
 #include <gr_fxpt_nco.h>
@@ -37,8 +38,8 @@ typedef boost::shared_ptr<@NAME@> @NAME@_sptr;
  * \ingroup source_blk
  */
 
-class @NAME@ : public gr_sync_block {
-  friend @NAME@_sptr 
+class GR_CORE_API @NAME@ : public gr_sync_block {
+  friend GR_CORE_API @NAME@_sptr 
   gr_make_@BASE_NAME@ (double sampling_freq, gr_waveform_t waveform,
 		       double frequency, double ampl, @TYPE@ offset);
 
@@ -73,7 +74,7 @@ class @NAME@ : public gr_sync_block {
   void set_offset (@TYPE@ offset);
 };
 
-@NAME@_sptr
+GR_CORE_API @NAME@_sptr
 gr_make_@BASE_NAME@ (double sampling_freq, gr_waveform_t waveform,
 		     double wave_freq, double ampl, @TYPE@ offset = 0);
 
diff --git a/gnuradio-core/src/lib/gengen/gr_sub_XX.h.t b/gnuradio-core/src/lib/gengen/gr_sub_XX.h.t
index a58d1f3b8e..4c988945e5 100644
--- a/gnuradio-core/src/lib/gengen/gr_sub_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_sub_XX.h.t
@@ -25,12 +25,13 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1);
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1);
 
 /*!
  * \brief output = input_0 -  input_1 - ...)
@@ -38,9 +39,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
  *
  * Subtract across all input streams.
  */
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
 {
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen);
 
   @NAME@ (size_t vlen);
 
diff --git a/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_XX.h.t b/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_XX.h.t
index 42d2010938..a7db84c5c7 100644
--- a/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_XX.h.t
@@ -25,13 +25,14 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 #include <gr_endianness.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @NAME@_sptr;
 
-@SPTR_NAME@ 
+GR_CORE_API @SPTR_NAME@ 
 gr_make_@BASE_NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness);
 
 /*!
@@ -57,9 +58,9 @@ gr_make_@BASE_NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness);
  * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc.
  * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc.
  */
-class @NAME@ : public gr_block
+class GR_CORE_API @NAME@ : public gr_block
 {
-  friend @SPTR_NAME@
+  friend GR_CORE_API @SPTR_NAME@
   gr_make_@BASE_NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness);
 
   @NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness);
diff --git a/gnuradio-core/src/lib/gengen/gr_vector_sink_X.h.t b/gnuradio-core/src/lib/gengen/gr_vector_sink_X.h.t
index 7ba5ee9e93..475cc0112f 100644
--- a/gnuradio-core/src/lib/gengen/gr_vector_sink_X.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_X.h.t
@@ -25,12 +25,13 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @NAME@_sptr;
 
-@NAME@_sptr
+GR_CORE_API @NAME@_sptr
 gr_make_@BASE_NAME@ (int vlen = 1);
 
 
@@ -39,8 +40,8 @@ gr_make_@BASE_NAME@ (int vlen = 1);
  * \ingroup sink_blk
  */
 
-class @NAME@ : public gr_sync_block {
-  friend @NAME@_sptr gr_make_@BASE_NAME@ (int vlen);
+class GR_CORE_API @NAME@ : public gr_sync_block {
+  friend GR_CORE_API @NAME@_sptr gr_make_@BASE_NAME@ (int vlen);
   std::vector<@TYPE@>	d_data;
   int			d_vlen;
   @NAME@ (int vlen);
diff --git a/gnuradio-core/src/lib/gengen/gr_vector_source_X.h.t b/gnuradio-core/src/lib/gengen/gr_vector_source_X.h.t
index 63edcb61c2..fbab3effba 100644
--- a/gnuradio-core/src/lib/gengen/gr_vector_source_X.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_vector_source_X.h.t
@@ -25,9 +25,10 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
-class @NAME@;
+class GR_CORE_API @NAME@;
 typedef boost::shared_ptr<@NAME@> @NAME@_sptr;
 
 /*!
@@ -36,7 +37,7 @@ typedef boost::shared_ptr<@NAME@> @NAME@_sptr;
  */
 
 class @NAME@ : public gr_sync_block {
-  friend @NAME@_sptr 
+  friend GR_CORE_API @NAME@_sptr 
   gr_make_@BASE_NAME@ (const std::vector<@TYPE@> &data, bool repeat, int vlen);
 
   std::vector<@TYPE@>	d_data;
@@ -53,7 +54,7 @@ class @NAME@ : public gr_sync_block {
 		    gr_vector_void_star &output_items);
 };
 
-@NAME@_sptr
+GR_CORE_API @NAME@_sptr
 gr_make_@BASE_NAME@ (const std::vector<@TYPE@> &data, bool repeat = false, int vlen = 1);
 
 #endif
diff --git a/gnuradio-core/src/lib/gengen/gr_xor_XX.h.t b/gnuradio-core/src/lib/gengen/gr_xor_XX.h.t
index 33d7294509..b2e1a68c8d 100644
--- a/gnuradio-core/src/lib/gengen/gr_xor_XX.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_xor_XX.h.t
@@ -25,12 +25,13 @@
 #ifndef @GUARD_NAME@
 #define @GUARD_NAME@
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
-@SPTR_NAME@ gr_make_@BASE_NAME@ ();
+GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
 
 /*!
  * \brief output = input_0 ^ input_1 ^ , ... ^ input_N)
@@ -38,9 +39,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
  *
  * bitwise boolean xor across all input streams.
  */
-class @NAME@ : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
 {
-  friend @SPTR_NAME@ gr_make_@BASE_NAME@ ();
+  friend GR_CORE_API @SPTR_NAME@ gr_make_@BASE_NAME@ ();
 
   @NAME@ ();
 
diff --git a/gnuradio-core/src/lib/hier/gr_channel_model.h b/gnuradio-core/src/lib/hier/gr_channel_model.h
index 116b5dc14e..07c0c76b6d 100644
--- a/gnuradio-core/src/lib/hier/gr_channel_model.h
+++ b/gnuradio-core/src/lib/hier/gr_channel_model.h
@@ -19,6 +19,7 @@
  * Boston, MA 02110-1301, USA.
  */
 
+#include <gr_core_api.h>
 #include <gr_top_block.h>
 #include <gr_fractional_interpolator_cc.h>
 #include <gr_sig_source_c.h>
@@ -31,7 +32,7 @@ class gr_channel_model;
 typedef boost::shared_ptr<gr_channel_model> gr_channel_model_sptr;
 
 
-gr_channel_model_sptr gr_make_channel_model(double noise_voltage=0.0,
+GR_CORE_API gr_channel_model_sptr gr_make_channel_model(double noise_voltage=0.0,
 					    double frequency_offset=0.0,
 					    double epsilon=1.0,
 					    const std::vector<gr_complex> &taps=std::vector<gr_complex>(1, 1),
@@ -41,7 +42,7 @@ gr_channel_model_sptr gr_make_channel_model(double noise_voltage=0.0,
  * \brief channel simulator
  * \ingroup misc_blk
  */
-class gr_channel_model : public gr_hier_block2
+class GR_CORE_API gr_channel_model : public gr_hier_block2
 {
  private:
   gr_channel_model(double noise_voltage,
@@ -50,7 +51,7 @@ class gr_channel_model : public gr_hier_block2
 		   const std::vector<gr_complex> &taps,
 		   double noise_seed);
 
-  friend gr_channel_model_sptr gr_make_channel_model(double noise_voltage,
+  friend GR_CORE_API gr_channel_model_sptr gr_make_channel_model(double noise_voltage,
 						     double frequency_offset,
 						     double epsilon,
 						     const std::vector<gr_complex> &taps,
diff --git a/gnuradio-core/src/lib/io/gr_file_descriptor_sink.h b/gnuradio-core/src/lib/io/gr_file_descriptor_sink.h
index fa8fa3f053..5e4cc65055 100644
--- a/gnuradio-core/src/lib/io/gr_file_descriptor_sink.h
+++ b/gnuradio-core/src/lib/io/gr_file_descriptor_sink.h
@@ -23,21 +23,22 @@
 #ifndef INCLUDED_GR_FILE_DESCRIPTOR_SINK_H
 #define INCLUDED_GR_FILE_DESCRIPTOR_SINK_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_file_descriptor_sink;
 typedef boost::shared_ptr<gr_file_descriptor_sink> gr_file_descriptor_sink_sptr;
 
-gr_file_descriptor_sink_sptr gr_make_file_descriptor_sink (size_t itemsize, int fd);
+GR_CORE_API gr_file_descriptor_sink_sptr gr_make_file_descriptor_sink (size_t itemsize, int fd);
 
 /*!
  * \brief Write stream to file descriptor.
  * \ingroup sink_blk
  */
 
-class gr_file_descriptor_sink : public gr_sync_block
+class GR_CORE_API gr_file_descriptor_sink : public gr_sync_block
 {
-  friend gr_file_descriptor_sink_sptr gr_make_file_descriptor_sink (size_t itemsize, int fd);
+  friend GR_CORE_API gr_file_descriptor_sink_sptr gr_make_file_descriptor_sink (size_t itemsize, int fd);
 
  private:
   size_t	d_itemsize;
diff --git a/gnuradio-core/src/lib/io/gr_file_descriptor_source.h b/gnuradio-core/src/lib/io/gr_file_descriptor_source.h
index a9f1172868..fa513fd25c 100644
--- a/gnuradio-core/src/lib/io/gr_file_descriptor_source.h
+++ b/gnuradio-core/src/lib/io/gr_file_descriptor_source.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_FILE_DESCRIPTOR_SOURCE_H
 #define INCLUDED_GR_FILE_DESCRIPTOR_SOURCE_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_file_descriptor_source;
 typedef boost::shared_ptr<gr_file_descriptor_source> gr_file_descriptor_source_sptr;
 
-gr_file_descriptor_source_sptr
+GR_CORE_API gr_file_descriptor_source_sptr
 gr_make_file_descriptor_source (size_t itemsize, int fd, bool repeat = false);
 
 /*!
@@ -36,9 +37,9 @@ gr_make_file_descriptor_source (size_t itemsize, int fd, bool repeat = false);
  * \ingroup source_blk
  */
 
-class gr_file_descriptor_source : public gr_sync_block
+class GR_CORE_API gr_file_descriptor_source : public gr_sync_block
 {
-  friend gr_file_descriptor_source_sptr
+  friend GR_CORE_API gr_file_descriptor_source_sptr
   gr_make_file_descriptor_source (size_t itemsize, int fd, bool repeat);
  private:
   size_t	 d_itemsize;
diff --git a/gnuradio-core/src/lib/io/gr_file_sink.h b/gnuradio-core/src/lib/io/gr_file_sink.h
index b9ad06cd68..180cbef2a9 100644
--- a/gnuradio-core/src/lib/io/gr_file_sink.h
+++ b/gnuradio-core/src/lib/io/gr_file_sink.h
@@ -23,22 +23,23 @@
 #ifndef INCLUDED_GR_FILE_SINK_H
 #define INCLUDED_GR_FILE_SINK_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_file_sink_base.h>
 
 class gr_file_sink;
 typedef boost::shared_ptr<gr_file_sink> gr_file_sink_sptr;
 
-gr_file_sink_sptr gr_make_file_sink(size_t itemsize, const char *filename);
+GR_CORE_API gr_file_sink_sptr gr_make_file_sink(size_t itemsize, const char *filename);
 
 /*!
  * \brief Write stream to file.
  * \ingroup sink_blk
  */
 
-class gr_file_sink : public gr_sync_block, public gr_file_sink_base
+class GR_CORE_API gr_file_sink : public gr_sync_block, public gr_file_sink_base
 {
-  friend gr_file_sink_sptr gr_make_file_sink(size_t itemsize, const char *filename);
+  friend GR_CORE_API gr_file_sink_sptr gr_make_file_sink(size_t itemsize, const char *filename);
 
  private:
   size_t	d_itemsize;
diff --git a/gnuradio-core/src/lib/io/gr_file_sink_base.h b/gnuradio-core/src/lib/io/gr_file_sink_base.h
index 7b96cdb7f3..6765dbad84 100644
--- a/gnuradio-core/src/lib/io/gr_file_sink_base.h
+++ b/gnuradio-core/src/lib/io/gr_file_sink_base.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_FILE_SINK_BASE_H
 #define INCLUDED_GR_FILE_SINK_BASE_H
 
+#include <gr_core_api.h>
 #include <boost/thread.hpp>
 #include <cstdio>
 
 /*!
  * \brief Common base class for file sinks
  */
-class gr_file_sink_base 
+class GR_CORE_API gr_file_sink_base
 {
  protected:
   FILE	       *d_fp;		// current FILE pointer
diff --git a/gnuradio-core/src/lib/io/gr_file_source.h b/gnuradio-core/src/lib/io/gr_file_source.h
index 5f5c2564e9..6e8fc4074b 100644
--- a/gnuradio-core/src/lib/io/gr_file_source.h
+++ b/gnuradio-core/src/lib/io/gr_file_source.h
@@ -23,12 +23,13 @@
 #ifndef INCLUDED_GR_FILE_SOURCE_H
 #define INCLUDED_GR_FILE_SOURCE_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 class gr_file_source;
 typedef boost::shared_ptr<gr_file_source> gr_file_source_sptr;
 
-gr_file_source_sptr
+GR_CORE_API gr_file_source_sptr
 gr_make_file_source (size_t itemsize, const char *filename, bool repeat = false);
 
 /*!
@@ -36,9 +37,9 @@ gr_make_file_source (size_t itemsize, const char *filename, bool repeat = false)
  * \ingroup source_blk
  */
 
-class gr_file_source : public gr_sync_block
+class GR_CORE_API gr_file_source : public gr_sync_block
 {
-  friend gr_file_source_sptr gr_make_file_source (size_t itemsize,
+  friend GR_CORE_API gr_file_source_sptr gr_make_file_source (size_t itemsize,
 						  const char *filename,
 						  bool repeat);
  private:
diff --git a/gnuradio-core/src/lib/io/gr_histo_sink_f.h b/gnuradio-core/src/lib/io/gr_histo_sink_f.h
index 8ba45ec55c..934066ba20 100644
--- a/gnuradio-core/src/lib/io/gr_histo_sink_f.h
+++ b/gnuradio-core/src/lib/io/gr_histo_sink_f.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_HISTO_SINK_F_H
 #define INCLUDED_GR_HISTO_SINK_F_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_msg_queue.h>
 #include <gruel/thread.h>
@@ -30,13 +31,13 @@
 class gr_histo_sink_f;
 typedef boost::shared_ptr<gr_histo_sink_f> gr_histo_sink_f_sptr;
 
-gr_histo_sink_f_sptr gr_make_histo_sink_f (gr_msg_queue_sptr msgq);
+GR_CORE_API gr_histo_sink_f_sptr gr_make_histo_sink_f (gr_msg_queue_sptr msgq);
 
 /*!
  * \brief Histogram module.
  * \ingroup sink_blk
  */
-class gr_histo_sink_f : public gr_sync_block
+class GR_CORE_API gr_histo_sink_f : public gr_sync_block
 {
 private:
   gr_msg_queue_sptr	d_msgq;
@@ -47,7 +48,7 @@ private:
   float *d_samps;
   gruel::mutex d_mutex;
 
-  friend gr_histo_sink_f_sptr gr_make_histo_sink_f (gr_msg_queue_sptr msgq);
+  friend GR_CORE_API gr_histo_sink_f_sptr gr_make_histo_sink_f (gr_msg_queue_sptr msgq);
   gr_histo_sink_f (gr_msg_queue_sptr msgq);
   void send_frame(void);
   void clear(void);
diff --git a/gnuradio-core/src/lib/io/gr_message_sink.h b/gnuradio-core/src/lib/io/gr_message_sink.h
index 5f1e5f91f3..180055261b 100644
--- a/gnuradio-core/src/lib/io/gr_message_sink.h
+++ b/gnuradio-core/src/lib/io/gr_message_sink.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_MESSAGE_SINK_H
 #define INCLUDED_GR_MESSAGE_SINK_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_message.h>
 #include <gr_msg_queue.h>
@@ -30,7 +31,7 @@
 class gr_message_sink;
 typedef boost::shared_ptr<gr_message_sink> gr_message_sink_sptr;
 
-gr_message_sink_sptr gr_make_message_sink (size_t itemsize,
+GR_CORE_API gr_message_sink_sptr gr_make_message_sink (size_t itemsize,
 					   gr_msg_queue_sptr msgq,
 					   bool dont_block);
 
@@ -38,14 +39,14 @@ gr_message_sink_sptr gr_make_message_sink (size_t itemsize,
  * \brief Gather received items into messages and insert into msgq
  * \ingroup sink_blk
  */
-class gr_message_sink : public gr_sync_block
+class GR_CORE_API gr_message_sink : public gr_sync_block
 {
  private:
   size_t	 	d_itemsize;
   gr_msg_queue_sptr	d_msgq;
   bool			d_dont_block;
 
-  friend gr_message_sink_sptr
+  friend GR_CORE_API gr_message_sink_sptr
   gr_make_message_sink(size_t itemsize, gr_msg_queue_sptr msgq, bool dont_block);
 
  protected:
diff --git a/gnuradio-core/src/lib/io/gr_message_source.h b/gnuradio-core/src/lib/io/gr_message_source.h
index 46a808754c..16a0f44749 100644
--- a/gnuradio-core/src/lib/io/gr_message_source.h
+++ b/gnuradio-core/src/lib/io/gr_message_source.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_MESSAGE_SOURCE_H
 #define INCLUDED_GR_MESSAGE_SOURCE_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_message.h>
 #include <gr_msg_queue.h>
@@ -30,14 +31,14 @@
 class gr_message_source;
 typedef boost::shared_ptr<gr_message_source> gr_message_source_sptr;
 
-gr_message_source_sptr gr_make_message_source (size_t itemsize, int msgq_limit=0);
-gr_message_source_sptr gr_make_message_source (size_t itemsize, gr_msg_queue_sptr msgq);
+GR_CORE_API gr_message_source_sptr gr_make_message_source (size_t itemsize, int msgq_limit=0);
+GR_CORE_API gr_message_source_sptr gr_make_message_source (size_t itemsize, gr_msg_queue_sptr msgq);
 
 /*!
  * \brief Turn received messages into a stream
  * \ingroup source_blk
  */
-class gr_message_source : public gr_sync_block
+class GR_CORE_API gr_message_source : public gr_sync_block
 {
  private:
   size_t	 	d_itemsize;
@@ -46,9 +47,9 @@ class gr_message_source : public gr_sync_block
   unsigned		d_msg_offset;
   bool			d_eof;
 
-  friend gr_message_source_sptr
+  friend GR_CORE_API gr_message_source_sptr
   gr_make_message_source(size_t itemsize, int msgq_limit);
-  friend gr_message_source_sptr
+  friend GR_CORE_API gr_message_source_sptr
   gr_make_message_source(size_t itemsize, gr_msg_queue_sptr msgq);
 
  protected:
diff --git a/gnuradio-core/src/lib/io/gr_oscope_guts.h b/gnuradio-core/src/lib/io/gr_oscope_guts.h
index f39db62f63..3223d4e38a 100644
--- a/gnuradio-core/src/lib/io/gr_oscope_guts.h
+++ b/gnuradio-core/src/lib/io/gr_oscope_guts.h
@@ -24,6 +24,7 @@
 #ifndef INCLUDED_GR_OSCOPE_GUTS_H
 #define INCLUDED_GR_OSCOPE_GUTS_H
 
+#include <gr_core_api.h>
 #include <gr_trigger_mode.h>
 #include <gr_msg_queue.h>
 
@@ -40,7 +41,7 @@
  * consist of 50% pre-trigger data and 50% post-trigger data.
  */
 
-class gr_oscope_guts {
+class GR_CORE_API gr_oscope_guts {
 public:
   static const int	MAX_CHANNELS = 8;
 private:
diff --git a/gnuradio-core/src/lib/io/gr_oscope_sink_f.h b/gnuradio-core/src/lib/io/gr_oscope_sink_f.h
index 1a8022b890..e3d1f65e50 100644
--- a/gnuradio-core/src/lib/io/gr_oscope_sink_f.h
+++ b/gnuradio-core/src/lib/io/gr_oscope_sink_f.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_OSCOPE_SINK_F_H
 #define INCLUDED_GR_OSCOPE_SINK_F_H
 
+#include <gr_core_api.h>
 #include <gr_oscope_sink_x.h>
 #include <gr_msg_queue.h>
 
 class gr_oscope_sink_f;
 typedef boost::shared_ptr<gr_oscope_sink_x> gr_oscope_sink_f_sptr;
 
-gr_oscope_sink_f_sptr gr_make_oscope_sink_f (double sampling_rate, gr_msg_queue_sptr msgq);
+GR_CORE_API gr_oscope_sink_f_sptr gr_make_oscope_sink_f (double sampling_rate, gr_msg_queue_sptr msgq);
 
 
 /*!
@@ -38,10 +39,10 @@ gr_oscope_sink_f_sptr gr_make_oscope_sink_f (double sampling_rate, gr_msg_queue_
  *
  * Accepts multiple float streams.
  */
-class gr_oscope_sink_f : public gr_oscope_sink_x
+class GR_CORE_API gr_oscope_sink_f : public gr_oscope_sink_x
 {
 private:
-  friend gr_oscope_sink_f_sptr
+  friend GR_CORE_API gr_oscope_sink_f_sptr
   gr_make_oscope_sink_f (double sampling_rate, gr_msg_queue_sptr msgq);
 
   gr_oscope_sink_f (double sampling_rate, gr_msg_queue_sptr msgq);
diff --git a/gnuradio-core/src/lib/io/gr_oscope_sink_x.h b/gnuradio-core/src/lib/io/gr_oscope_sink_x.h
index 62cf65100a..aaff5870b7 100644
--- a/gnuradio-core/src/lib/io/gr_oscope_sink_x.h
+++ b/gnuradio-core/src/lib/io/gr_oscope_sink_x.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_OSCOPE_SINK_X_H
 #define INCLUDED_GR_OSCOPE_SINK_X_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_trigger_mode.h>
 
@@ -34,7 +35,7 @@ class gr_oscope_guts;
  *
  * Don't instantiate this.  Use gr_oscope_sink_f or gr_oscope_sink_c instead.
  */
-class gr_oscope_sink_x : public gr_sync_block
+class GR_CORE_API gr_oscope_sink_x : public gr_sync_block
 {
 protected:
   double			 d_sampling_rate;
diff --git a/gnuradio-core/src/lib/io/gr_tagged_file_sink.h b/gnuradio-core/src/lib/io/gr_tagged_file_sink.h
index 2e0a5c63ae..da12dca782 100644
--- a/gnuradio-core/src/lib/io/gr_tagged_file_sink.h
+++ b/gnuradio-core/src/lib/io/gr_tagged_file_sink.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_TAGGED_FILE_SINK_H
 #define INCLUDED_GR_TAGGED_FILE_SINK_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <cstdio>  // for FILE
 
 class gr_tagged_file_sink;
 typedef boost::shared_ptr<gr_tagged_file_sink> gr_tagged_file_sink_sptr;
 
-gr_tagged_file_sink_sptr gr_make_tagged_file_sink (size_t itemsize,
+GR_CORE_API gr_tagged_file_sink_sptr gr_make_tagged_file_sink (size_t itemsize,
 						   double samp_rate);
 
 /*!
@@ -37,9 +38,9 @@ gr_tagged_file_sink_sptr gr_make_tagged_file_sink (size_t itemsize,
  * \ingroup sink_blk
  */
 
-class gr_tagged_file_sink : public gr_sync_block
+class GR_CORE_API gr_tagged_file_sink : public gr_sync_block
 {
-  friend gr_tagged_file_sink_sptr gr_make_tagged_file_sink (size_t itemsize,
+  friend GR_CORE_API gr_tagged_file_sink_sptr gr_make_tagged_file_sink (size_t itemsize,
 							    double samp_rate);
 
  private:
diff --git a/gnuradio-core/src/lib/io/gr_udp_sink.h b/gnuradio-core/src/lib/io/gr_udp_sink.h
index 421d514a4d..e9d4f8c731 100644
--- a/gnuradio-core/src/lib/io/gr_udp_sink.h
+++ b/gnuradio-core/src/lib/io/gr_udp_sink.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_UDP_SINK_H
 #define INCLUDED_GR_UDP_SINK_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gruel/thread.h>
 
 class gr_udp_sink;
 typedef boost::shared_ptr<gr_udp_sink> gr_udp_sink_sptr;
 
-gr_udp_sink_sptr
+GR_CORE_API gr_udp_sink_sptr
 gr_make_udp_sink (size_t itemsize, 
 		  const char *host, unsigned short port,
 		  int payload_size=1472, bool eof=true);
@@ -47,9 +48,9 @@ gr_make_udp_sink (size_t itemsize,
  * \param eof          Send zero-length packet on disconnect
  */
 
-class gr_udp_sink : public gr_sync_block
+class GR_CORE_API gr_udp_sink : public gr_sync_block
 {
-  friend gr_udp_sink_sptr gr_make_udp_sink (size_t itemsize, 
+  friend GR_CORE_API gr_udp_sink_sptr gr_make_udp_sink (size_t itemsize, 
 					    const char *host,
 					    unsigned short port,
 					    int payload_size, bool eof);
diff --git a/gnuradio-core/src/lib/io/gr_udp_source.h b/gnuradio-core/src/lib/io/gr_udp_source.h
index 5d30fad304..e2898981de 100644
--- a/gnuradio-core/src/lib/io/gr_udp_source.h
+++ b/gnuradio-core/src/lib/io/gr_udp_source.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_UDP_SOURCE_H
 #define INCLUDED_GR_UDP_SOURCE_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gruel/thread.h>
 
 class gr_udp_source;
 typedef boost::shared_ptr<gr_udp_source> gr_udp_source_sptr;
 
-gr_udp_source_sptr gr_make_udp_source(size_t itemsize, const char *host, 
+GR_CORE_API gr_udp_source_sptr gr_make_udp_source(size_t itemsize, const char *host, 
 				      unsigned short port,
 				      int payload_size=1472,
 				      bool eof=true, bool wait=true);
@@ -52,9 +53,9 @@ gr_udp_source_sptr gr_make_udp_source(size_t itemsize, const char *host,
  *
 */
 
-class gr_udp_source : public gr_sync_block
+class GR_CORE_API gr_udp_source : public gr_sync_block
 {
-  friend gr_udp_source_sptr gr_make_udp_source(size_t itemsize,
+  friend GR_CORE_API gr_udp_source_sptr gr_make_udp_source(size_t itemsize,
 					       const char *host, 
 					       unsigned short port,
 					       int payload_size,
diff --git a/gnuradio-core/src/lib/io/gr_wavfile_sink.h b/gnuradio-core/src/lib/io/gr_wavfile_sink.h
index a1d6ed5271..5fd3eaadca 100644
--- a/gnuradio-core/src/lib/io/gr_wavfile_sink.h
+++ b/gnuradio-core/src/lib/io/gr_wavfile_sink.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_WAVFILE_SINK_H
 #define INCLUDED_GR_WAVFILE_SINK_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <gr_file_sink_base.h>
 #include <boost/thread.hpp>
@@ -36,7 +37,7 @@ typedef boost::shared_ptr<gr_wavfile_sink> gr_wavfile_sink_sptr;
  * \p sample_rate Sample rate [S/s]
  * \p bits_per_sample 16 or 8 bit, default is 16
  */
-gr_wavfile_sink_sptr
+GR_CORE_API gr_wavfile_sink_sptr
 gr_make_wavfile_sink (const char *filename,
 		      int n_channels,
 		      unsigned int sample_rate,
@@ -50,10 +51,10 @@ gr_make_wavfile_sink (const char *filename,
  *
  * \ingroup sink_blk
  */
-class gr_wavfile_sink : public gr_sync_block
+class GR_CORE_API gr_wavfile_sink : public gr_sync_block
 {
 private:
-  friend gr_wavfile_sink_sptr gr_make_wavfile_sink (const char *filename,
+  friend GR_CORE_API gr_wavfile_sink_sptr gr_make_wavfile_sink (const char *filename,
 						    int n_channels,
 						    unsigned int sample_rate,
 						    int bits_per_sample);
diff --git a/gnuradio-core/src/lib/io/gr_wavfile_source.h b/gnuradio-core/src/lib/io/gr_wavfile_source.h
index e434a6b4c6..b300f2808e 100644
--- a/gnuradio-core/src/lib/io/gr_wavfile_source.h
+++ b/gnuradio-core/src/lib/io/gr_wavfile_source.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_GR_WAVFILE_SOURCE_H
 #define INCLUDED_GR_WAVFILE_SOURCE_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 #include <cstdio>  // for FILE
 
 class gr_wavfile_source;
 typedef boost::shared_ptr<gr_wavfile_source> gr_wavfile_source_sptr;
 
-gr_wavfile_source_sptr
+GR_CORE_API gr_wavfile_source_sptr
 gr_make_wavfile_source (const char *filename, bool repeat = false);
 
 /*!
@@ -41,10 +42,10 @@ gr_make_wavfile_source (const char *filename, bool repeat = false);
  * \ingroup source_blk
  */
 
-class gr_wavfile_source : public gr_sync_block
+class GR_CORE_API gr_wavfile_source : public gr_sync_block
 {
 private:
-  friend gr_wavfile_source_sptr gr_make_wavfile_source (const char *filename,
+  friend GR_CORE_API gr_wavfile_source_sptr gr_make_wavfile_source (const char *filename,
 		                                              bool repeat);
   gr_wavfile_source(const char *filename, bool repeat);
 
diff --git a/gnuradio-core/src/lib/io/gri_wavfile.h b/gnuradio-core/src/lib/io/gri_wavfile.h
index 2c7c1207c7..2268474fbb 100644
--- a/gnuradio-core/src/lib/io/gri_wavfile.h
+++ b/gnuradio-core/src/lib/io/gri_wavfile.h
@@ -23,6 +23,7 @@
 // This file stores all the RIFF file type knowledge for the gr_wavfile_*
 // blocks.
 
+#include <gr_core_api.h>
 #include <cstdio>
 
 /*!
diff --git a/gnuradio-core/src/lib/io/i2c.h b/gnuradio-core/src/lib/io/i2c.h
index e959f59a80..7d446dfa3a 100644
--- a/gnuradio-core/src/lib/io/i2c.h
+++ b/gnuradio-core/src/lib/io/i2c.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_I2C_H
 #define INCLUDED_I2C_H
 
+#include <gr_core_api.h>
 #include <boost/shared_ptr.hpp>
 
 class i2c;
@@ -31,7 +32,7 @@ typedef boost::shared_ptr<i2c> i2c_sptr;
 /*!
  * \brief abstract class for controlling i2c bus
  */
-class i2c {
+class GR_CORE_API i2c {
  public:
   
   i2c () {}
diff --git a/gnuradio-core/src/lib/io/i2c_bbio.h b/gnuradio-core/src/lib/io/i2c_bbio.h
index c6b226e395..110a565550 100644
--- a/gnuradio-core/src/lib/io/i2c_bbio.h
+++ b/gnuradio-core/src/lib/io/i2c_bbio.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_I2C_BBIO_H
 #define INCLUDED_I2C_BBIO_H
 
+#include <gr_core_api.h>
 #include <boost/shared_ptr.hpp>
 
 class i2c_bbio;
@@ -33,7 +34,7 @@ typedef boost::shared_ptr<i2c_bbio>	i2c_bbio_sptr;
  * \brief abstract class that implements bit banging i/o for i2c bus.
  * \ingroup base
  */
-class i2c_bbio {
+class GR_CORE_API i2c_bbio {
  public:
 
   i2c_bbio () {}
diff --git a/gnuradio-core/src/lib/io/i2c_bbio_pp.h b/gnuradio-core/src/lib/io/i2c_bbio_pp.h
index 5a99cdcd19..4a311a2c92 100644
--- a/gnuradio-core/src/lib/io/i2c_bbio_pp.h
+++ b/gnuradio-core/src/lib/io/i2c_bbio_pp.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_I2C_BBIO_PP_H
 #define INCLUDED_I2C_BBIO_PP_H
 
+#include <gr_core_api.h>
 #include "i2c_bbio.h"
 #include "ppio.h"
 
@@ -33,8 +34,8 @@
  * This class talks to the i2c bus on the microtune eval board using
  * the parallel port.  This works for both the 4937 and 4702 boards.
  */
-class i2c_bbio_pp : public i2c_bbio {
-  friend i2c_bbio_sptr make_i2c_bbio_pp (ppio_sptr pp);
+class GR_CORE_API i2c_bbio_pp : public i2c_bbio {
+  friend GR_CORE_API i2c_bbio_sptr make_i2c_bbio_pp (ppio_sptr pp);
   i2c_bbio_pp (ppio_sptr pp);
 
  public:
@@ -50,7 +51,7 @@ class i2c_bbio_pp : public i2c_bbio {
   ppio_sptr	d_pp;
 };
 
-i2c_bbio_sptr make_i2c_bbio_pp (ppio_sptr pp);
+GR_CORE_API i2c_bbio_sptr make_i2c_bbio_pp (ppio_sptr pp);
 
 
 #endif /* INCLUDED_I2C_BBIO_PP_H */
diff --git a/gnuradio-core/src/lib/io/i2c_bitbang.h b/gnuradio-core/src/lib/io/i2c_bitbang.h
index c9deb38baa..feb23b7879 100644
--- a/gnuradio-core/src/lib/io/i2c_bitbang.h
+++ b/gnuradio-core/src/lib/io/i2c_bitbang.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_I2C_BITBANG_H
 #define INCLUDED_I2C_BITBANG_H
 
+#include <gr_core_api.h>
 #include <i2c.h>
 #include <i2c_bbio.h>
 
@@ -30,8 +31,8 @@
  * \brief class for controlling i2c bus
  * \ingroup base
  */
-class i2c_bitbang : public i2c {
-  friend i2c_sptr make_i2c_bitbang (i2c_bbio_sptr io);
+class GR_CORE_API i2c_bitbang : public i2c {
+  friend GR_CORE_API i2c_sptr make_i2c_bitbang (i2c_bbio_sptr io);
   i2c_bitbang (i2c_bbio_sptr io);
 
  public:
@@ -57,7 +58,7 @@ private:
   i2c_bbio_sptr		d_io;
 };
 
-i2c_sptr make_i2c_bitbang (i2c_bbio_sptr io);
+GR_CORE_API i2c_sptr make_i2c_bitbang (i2c_bbio_sptr io);
 
 #endif /* INCLUDED_I2C_BITBANG_H */
 
diff --git a/gnuradio-core/src/lib/io/microtune_4702.h b/gnuradio-core/src/lib/io/microtune_4702.h
index 95c64abe78..fd8d893053 100644
--- a/gnuradio-core/src/lib/io/microtune_4702.h
+++ b/gnuradio-core/src/lib/io/microtune_4702.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_MICROTUNE_4702_H
 #define INCLUDED_MICROTUNE_4702_H
 
+#include <gr_core_api.h>
 #include <microtune_xxxx.h>
 
 /*!
@@ -30,7 +31,7 @@
  * \ingroup hardware
  */
 
-class microtune_4702 : public microtune_xxxx   {
+class GR_CORE_API microtune_4702 : public microtune_xxxx   {
 public:
   microtune_4702 (i2c_sptr i2c, int i2c_addr);
 
diff --git a/gnuradio-core/src/lib/io/microtune_4702_eval_board.h b/gnuradio-core/src/lib/io/microtune_4702_eval_board.h
index 6e97269172..e3c07fdf98 100644
--- a/gnuradio-core/src/lib/io/microtune_4702_eval_board.h
+++ b/gnuradio-core/src/lib/io/microtune_4702_eval_board.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_MICROTUNE_4702_EVAL_BOARD_H
 #define INCLUDED_MICROTUNE_4702_EVAL_BOARD_H
 
+#include <gr_core_api.h>
 #include "microtune_xxxx_eval_board.h"
 
 /*!
@@ -30,7 +31,7 @@
  * \ingroup hardware
  */
 
-class microtune_4702_eval_board : public microtune_xxxx_eval_board {
+class GR_CORE_API microtune_4702_eval_board : public microtune_xxxx_eval_board {
 public:
   microtune_4702_eval_board (int which_pp = 0);
   ~microtune_4702_eval_board ();
diff --git a/gnuradio-core/src/lib/io/microtune_4937.h b/gnuradio-core/src/lib/io/microtune_4937.h
index b263ceb0fb..bc8a26c646 100644
--- a/gnuradio-core/src/lib/io/microtune_4937.h
+++ b/gnuradio-core/src/lib/io/microtune_4937.h
@@ -23,13 +23,14 @@
 #ifndef INCLUDED_MICROTUNE_4937_H
 #define INCLUDED_MICROTUNE_4937_H
 
+#include <gr_core_api.h>
 #include <microtune_xxxx.h>
 
 /*!
  * \brief class for controlling microtune 4937 tuner module
  * \ingroup hardware
  */
-class microtune_4937 : public microtune_xxxx {
+class GR_CORE_API microtune_4937 : public microtune_xxxx {
 public:
   microtune_4937 (i2c_sptr i2c, int i2c_addr = 0x61);
   virtual ~microtune_4937 ();
diff --git a/gnuradio-core/src/lib/io/microtune_4937_eval_board.h b/gnuradio-core/src/lib/io/microtune_4937_eval_board.h
index 154a7281a7..09c00d1163 100644
--- a/gnuradio-core/src/lib/io/microtune_4937_eval_board.h
+++ b/gnuradio-core/src/lib/io/microtune_4937_eval_board.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_MICROTUNE_4937_EVAL_BOARD_H
 #define INCLUDED_MICROTUNE_4937_EVAL_BOARD_H
 
+#include <gr_core_api.h>
 #include "microtune_xxxx_eval_board.h"
 
 /*!
@@ -30,7 +31,7 @@
  * \ingroup hardware
  */
 
-class microtune_4937_eval_board : public microtune_xxxx_eval_board {
+class GR_CORE_API microtune_4937_eval_board : public microtune_xxxx_eval_board {
 public:
   microtune_4937_eval_board (int which_pp = 0);
   ~microtune_4937_eval_board ();
diff --git a/gnuradio-core/src/lib/io/microtune_xxxx.h b/gnuradio-core/src/lib/io/microtune_xxxx.h
index 4d5074a857..8b6ec25aa6 100644
--- a/gnuradio-core/src/lib/io/microtune_xxxx.h
+++ b/gnuradio-core/src/lib/io/microtune_xxxx.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_MICROTUNE_XXXX_H
 #define INCLUDED_MICROTUNE_XXXX_H
 
+#include <gr_core_api.h>
 #include <boost/shared_ptr.hpp>
 
 class i2c;
@@ -32,7 +33,7 @@ typedef boost::shared_ptr<i2c> i2c_sptr;
  * \brief abstract class for controlling microtune {4937,4702} tuner modules
  * \ingroup base
  */
-class microtune_xxxx {
+class GR_CORE_API microtune_xxxx {
 public:
   microtune_xxxx () {}
   virtual ~microtune_xxxx ();
diff --git a/gnuradio-core/src/lib/io/microtune_xxxx_eval_board.h b/gnuradio-core/src/lib/io/microtune_xxxx_eval_board.h
index 808075e553..08aa438c0d 100644
--- a/gnuradio-core/src/lib/io/microtune_xxxx_eval_board.h
+++ b/gnuradio-core/src/lib/io/microtune_xxxx_eval_board.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_MICROTUNE_XXXX_EVAL_BOARD_H
 #define INCLUDED_MICROTUNE_XXXX_EVAL_BOARD_H
 
+#include <gr_core_api.h>
 #include <boost/shared_ptr.hpp>
 
 class microtune_xxxx;
@@ -37,7 +38,7 @@ typedef boost::shared_ptr<i2c> i2c_sptr;
  * \brief abstract class for controlling microtune xxxx eval board
  * \ingroup hardware
  */
-class microtune_xxxx_eval_board {
+class GR_CORE_API microtune_xxxx_eval_board {
 public:
   microtune_xxxx_eval_board (int which_pp = 0);
   virtual ~microtune_xxxx_eval_board ();
diff --git a/gnuradio-core/src/lib/io/ppio.h b/gnuradio-core/src/lib/io/ppio.h
index e1a62e2a3d..f7d14d52ea 100644
--- a/gnuradio-core/src/lib/io/ppio.h
+++ b/gnuradio-core/src/lib/io/ppio.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_PPIO_H
 #define INCLUDED_PPIO_H
 
+#include <gr_core_api.h>
 #include <boost/shared_ptr.hpp>
 
 class ppio;
@@ -34,7 +35,7 @@ typedef boost::shared_ptr<ppio> ppio_sptr;
  * \ingroup hardware
  */
 
-class ppio {
+class GR_CORE_API ppio {
  public:
   ppio () {}
   virtual ~ppio ();
@@ -55,7 +56,7 @@ class ppio {
  * Split out from class to make life easier for SWIG
  */
 
-ppio_sptr make_ppio (int which_pp);
+GR_CORE_API ppio_sptr make_ppio (int which_pp);
 
 
 #endif /* INCLUDED_PPIO_H */
diff --git a/gnuradio-core/src/lib/io/ppio_ppdev.h b/gnuradio-core/src/lib/io/ppio_ppdev.h
index b5abe3f0a4..5d082d784c 100644
--- a/gnuradio-core/src/lib/io/ppio_ppdev.h
+++ b/gnuradio-core/src/lib/io/ppio_ppdev.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_PPIO_PPDEV_H
 #define INCLUDED_PPIO_PPDEV_H
 
+#include <gr_core_api.h>
 #include <ppio.h>
 
 class ppio_ppdev;
@@ -33,8 +34,8 @@ typedef boost::shared_ptr<ppio_ppdev> ppio_ppdev_sptr;
  * \ingroup hardware
  */
 
-class ppio_ppdev : public ppio {
-  friend ppio_ppdev_sptr make_ppio_ppdev (int which = 0);
+class GR_CORE_API ppio_ppdev : public ppio {
+  friend GR_CORE_API ppio_ppdev_sptr make_ppio_ppdev (int which = 0);
   ppio_ppdev (int which = 0);
 
  public:
diff --git a/gnuradio-core/src/lib/io/sdr_1000.h b/gnuradio-core/src/lib/io/sdr_1000.h
index 113e85deb5..6647fbba55 100644
--- a/gnuradio-core/src/lib/io/sdr_1000.h
+++ b/gnuradio-core/src/lib/io/sdr_1000.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_SDR_1000_H
 #define INCLUDED_SDR_1000_H
 
+#include <gr_core_api.h>
 #include <boost/shared_ptr.hpp>
 
 class ppio;
@@ -36,7 +37,7 @@ enum { L_EXT = 0, L_BAND = 1, L_DDS0 = 2, L_DDS1 = 3 };
  * \sa sdr_1000.py for a higher level interface.
  * \ingroup hardware
  */
-class sdr_1000_base {
+class GR_CORE_API sdr_1000_base {
   ppio_sptr	d_ppio;
   int	 	d_shadow[4];	// shadow latches
   
diff --git a/gnuradio-core/src/lib/reed-solomon/char.h b/gnuradio-core/src/lib/reed-solomon/char.h
index 2fbcb504aa..f4db986c30 100644
--- a/gnuradio-core/src/lib/reed-solomon/char.h
+++ b/gnuradio-core/src/lib/reed-solomon/char.h
@@ -6,6 +6,8 @@
 
 #define DTYPE unsigned char
 
+#include <gr_core_api.h>
+
 /* Reed-Solomon codec control block */
 struct rs {
   unsigned int mm;              /* Bits per symbol */
@@ -44,12 +46,11 @@ static inline int modnn(struct rs *rs,int x){
 #define INIT_RS init_rs_char
 #define FREE_RS free_rs_char
 
-void ENCODE_RS(void *p,DTYPE *data,DTYPE *parity);
-int DECODE_RS(void *p,DTYPE *data,int *eras_pos,int no_eras);
+GR_CORE_API void ENCODE_RS(void *p,DTYPE *data,DTYPE *parity);
+GR_CORE_API int DECODE_RS(void *p,DTYPE *data,int *eras_pos,int no_eras);
 void *INIT_RS(unsigned int symsize,unsigned int gfpoly,unsigned int fcr,
 		   unsigned int prim,unsigned int nroots);
-void FREE_RS(void *p);
-
+GR_CORE_API void FREE_RS(void *p);
 
 
 
diff --git a/gnuradio-core/src/lib/reed-solomon/fixed.h b/gnuradio-core/src/lib/reed-solomon/fixed.h
index 9f0ddd9a4d..30091e7bf3 100644
--- a/gnuradio-core/src/lib/reed-solomon/fixed.h
+++ b/gnuradio-core/src/lib/reed-solomon/fixed.h
@@ -7,6 +7,8 @@
  */
 #define DTYPE unsigned char
 
+#include <gr_core_api.h>
+
 static inline int mod255(int x){
   while (x >= 255) {
     x -= 255;
@@ -34,5 +36,5 @@ extern unsigned char CCSDS_poly[];
 #define ENCODE_RS encode_rs_8
 #define DECODE_RS decode_rs_8
 
-void ENCODE_RS(DTYPE *data,DTYPE *parity);
-int DECODE_RS(DTYPE *data, int *eras_pos, int no_eras);
+GR_CORE_API void ENCODE_RS(DTYPE *data,DTYPE *parity);
+GR_CORE_API int DECODE_RS(DTYPE *data, int *eras_pos, int no_eras);
\ No newline at end of file
diff --git a/gnuradio-core/src/lib/reed-solomon/int.h b/gnuradio-core/src/lib/reed-solomon/int.h
index 2b0405ae02..79979f8277 100644
--- a/gnuradio-core/src/lib/reed-solomon/int.h
+++ b/gnuradio-core/src/lib/reed-solomon/int.h
@@ -5,8 +5,10 @@
  */
 #define DTYPE int
 
+#include <gr_core_api.h>
+
 /* Reed-Solomon codec control block */
-struct rs {
+struct GR_CORE_API rs {
   unsigned int mm;   /* Bits per symbol */
   unsigned int nn;   /* Symbols per block (= (1<<mm)-1) */
   int *alpha_to;      /* log lookup table */
@@ -43,12 +45,11 @@ static inline int modnn(struct rs *rs,int x){
 #define INIT_RS init_rs_int
 #define FREE_RS free_rs_int
 
-void ENCODE_RS(void *p,DTYPE *data,DTYPE *parity);
-int DECODE_RS(void *p,DTYPE *data,int *eras_pos,int no_eras);
+GR_CORE_API void ENCODE_RS(void *p,DTYPE *data,DTYPE *parity);
+GR_CORE_API int DECODE_RS(void *p,DTYPE *data,int *eras_pos,int no_eras);
 void *INIT_RS(unsigned int symsize,unsigned int gfpoly,unsigned int fcr,
 		   unsigned int prim,unsigned int nroots);
-void FREE_RS(void *p);
-
+GR_CORE_API void FREE_RS(void *p);
 
 
 
diff --git a/gnuradio-core/src/lib/reed-solomon/rs.h b/gnuradio-core/src/lib/reed-solomon/rs.h
index 9e731d9d92..b56e1cff6c 100644
--- a/gnuradio-core/src/lib/reed-solomon/rs.h
+++ b/gnuradio-core/src/lib/reed-solomon/rs.h
@@ -1,28 +1,29 @@
+#include <gr_core_api.h>
 /* User include file for the Reed-Solomon codec
  * Copyright 2002, Phil Karn KA9Q
  * May be used under the terms of the GNU General Public License (GPL)
  */
 
 /* General purpose RS codec, 8-bit symbols */
-void encode_rs_char(void *rs,unsigned char *data,unsigned char *parity);
+GR_CORE_API void encode_rs_char(void *rs,unsigned char *data,unsigned char *parity);
 int decode_rs_char(void *rs,unsigned char *data,int *eras_pos,
 		   int no_eras);
 void *init_rs_char(unsigned int symsize,unsigned int gfpoly,
 		   unsigned int fcr,unsigned int prim,unsigned int nroots);
-void free_rs_char(void *rs);
+GR_CORE_API void free_rs_char(void *rs);
 
 /* General purpose RS codec, integer symbols */
-void encode_rs_int(void *rs,int *data,int *parity);
-int decode_rs_int(void *rs,int *data,int *eras_pos,int no_eras);
+GR_CORE_API void encode_rs_int(void *rs,int *data,int *parity);
+GR_CORE_API int decode_rs_int(void *rs,int *data,int *eras_pos,int no_eras);
 void *init_rs_int(unsigned int symsize,unsigned int gfpoly,unsigned int fcr,
 		  unsigned int prim,unsigned int nroots);
-void free_rs_int(void *rs);
+GR_CORE_API void free_rs_int(void *rs);
 
 /* CCSDS standard (255,223) RS codec with conventional (*not* dual-basis)
  * symbol representation
  */
-void encode_rs_8(unsigned char *data,unsigned char *parity);
-int decode_rs_8(unsigned char *data,int *eras_pos,int no_eras);
+GR_CORE_API void encode_rs_8(unsigned char *data,unsigned char *parity);
+GR_CORE_API int decode_rs_8(unsigned char *data,int *eras_pos,int no_eras);
 
 /* Tables to map from conventional->dual (Taltab) and
  * dual->conventional (Tal1tab) bases
diff --git a/gnuradio-core/src/lib/runtime/gr_basic_block.h b/gnuradio-core/src/lib/runtime/gr_basic_block.h
index 3b0cd51ddf..2adca8ccbe 100644
--- a/gnuradio-core/src/lib/runtime/gr_basic_block.h
+++ b/gnuradio-core/src/lib/runtime/gr_basic_block.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_BASIC_BLOCK_H
 #define INCLUDED_GR_BASIC_BLOCK_H
 
+#include <gr_core_api.h>
 #include <gr_runtime_types.h>
 #include <gr_sptr_magic.h>
 #include <boost/enable_shared_from_this.hpp>
@@ -41,7 +42,7 @@
  * signal processing functions.
  */
 
-class gr_basic_block : public gr_msg_accepter, public boost::enable_shared_from_this<gr_basic_block>
+class GR_CORE_API gr_basic_block : public gr_msg_accepter, public boost::enable_shared_from_this<gr_basic_block>
 {
     typedef boost::function<void(pmt::pmt_t)> msg_handler_t;
 
@@ -158,7 +159,7 @@ inline bool operator<(gr_basic_block_sptr lhs, gr_basic_block_sptr rhs)
 typedef std::vector<gr_basic_block_sptr> gr_basic_block_vector_t;
 typedef std::vector<gr_basic_block_sptr>::iterator gr_basic_block_viter_t;
 
-long gr_basic_block_ncurrently_allocated();
+GR_CORE_API long gr_basic_block_ncurrently_allocated();
 
 inline std::ostream &operator << (std::ostream &os, gr_basic_block_sptr basic_block)
 {
diff --git a/gnuradio-core/src/lib/runtime/gr_block.h b/gnuradio-core/src/lib/runtime/gr_block.h
index fc22f9ea87..2453e97b80 100644
--- a/gnuradio-core/src/lib/runtime/gr_block.h
+++ b/gnuradio-core/src/lib/runtime/gr_block.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_BLOCK_H
 #define INCLUDED_GR_BLOCK_H
 
+#include <gr_core_api.h>
 #include <gr_basic_block.h>
 
 /*!
@@ -53,7 +54,7 @@
  * It reads the input items and writes the output items.
  */
 
-class gr_block : public gr_basic_block {
+class GR_CORE_API gr_block : public gr_basic_block {
 
  public:
   
@@ -300,7 +301,7 @@ class gr_block : public gr_basic_block {
 			 const pmt::pmt_t &key);
 
   // These are really only for internal use, but leaving them public avoids
-  // having to work up an ever-varying list of friends
+  // having to work up an ever-varying list of friend GR_CORE_APIs
 
  public:
   gr_block_detail_sptr detail () const { return d_detail; }
diff --git a/gnuradio-core/src/lib/runtime/gr_block_detail.h b/gnuradio-core/src/lib/runtime/gr_block_detail.h
index d7ec3b1368..633da1b0c7 100644
--- a/gnuradio-core/src/lib/runtime/gr_block_detail.h
+++ b/gnuradio-core/src/lib/runtime/gr_block_detail.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_BLOCK_DETAIL_H
 #define INCLUDED_GR_BLOCK_DETAIL_H
 
+#include <gr_core_api.h>
 #include <gr_runtime_types.h>
 #include <gr_tpb_detail.h>
 #include <gr_tag_info.h>
@@ -36,7 +37,7 @@
  * of almost all users of GNU Radio.  This decoupling also means that
  * we can make changes to the guts without having to recompile everything.
  */
-class gr_block_detail {
+class GR_CORE_API gr_block_detail {
  public:
   ~gr_block_detail ();
 
@@ -172,16 +173,16 @@ class gr_block_detail {
 
   gr_block_detail (unsigned int ninputs, unsigned int noutputs);
 
-  friend class gr_tpb_detail;
+  friend struct gr_tpb_detail;
 
-  friend gr_block_detail_sptr
+  friend GR_CORE_API gr_block_detail_sptr
   gr_make_block_detail (unsigned int ninputs, unsigned int noutputs);
 };
 
-gr_block_detail_sptr
+GR_CORE_API gr_block_detail_sptr
 gr_make_block_detail (unsigned int ninputs, unsigned int noutputs);
 
-long
+GR_CORE_API long
 gr_block_detail_ncurrently_allocated ();
 
 #endif /* INCLUDED_GR_BLOCK_DETAIL_H */
diff --git a/gnuradio-core/src/lib/runtime/gr_block_executor.h b/gnuradio-core/src/lib/runtime/gr_block_executor.h
index 77ace55229..cd93212e1e 100644
--- a/gnuradio-core/src/lib/runtime/gr_block_executor.h
+++ b/gnuradio-core/src/lib/runtime/gr_block_executor.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_BLOCK_EXECUTOR_H
 #define INCLUDED_GR_BLOCK_EXECUTOR_H
 
+#include <gr_core_api.h>
 #include <gr_runtime_types.h>
 #include <fstream>
 #include <gruel/pmt.h>
@@ -36,7 +37,7 @@
  * \ingroup internal
  */
 
-class gr_block_executor {
+class GR_CORE_API gr_block_executor {
 protected:
   gr_block_sptr			d_block;	// The block we're trying to run
   std::ofstream	       	       *d_log;
diff --git a/gnuradio-core/src/lib/runtime/gr_buffer.h b/gnuradio-core/src/lib/runtime/gr_buffer.h
index e5725d3860..e7c0a06a5b 100644
--- a/gnuradio-core/src/lib/runtime/gr_buffer.h
+++ b/gnuradio-core/src/lib/runtime/gr_buffer.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_BUFFER_H
 #define INCLUDED_GR_BUFFER_H
 
+#include <gr_core_api.h>
 #include <gr_runtime_types.h>
 #include <boost/weak_ptr.hpp>
 #include <gruel/thread.h>
@@ -42,14 +43,14 @@ class gr_vmcircbuf;
  * \param sizeof_item is the size of an item in bytes.
  * \param link is the block that writes to this buffer.
  */
-gr_buffer_sptr gr_make_buffer (int nitems, size_t sizeof_item, gr_block_sptr link=gr_block_sptr());
+GR_CORE_API gr_buffer_sptr gr_make_buffer (int nitems, size_t sizeof_item, gr_block_sptr link=gr_block_sptr());
 
 
 /*!
  * \brief Single writer, multiple reader fifo.
  * \ingroup internal
  */
-class gr_buffer {
+class GR_CORE_API gr_buffer {
  public:
 
   virtual ~gr_buffer ();
@@ -115,8 +116,8 @@ class gr_buffer {
  private:
 
   friend class gr_buffer_reader;
-  friend gr_buffer_sptr gr_make_buffer (int nitems, size_t sizeof_item, gr_block_sptr link);
-  friend gr_buffer_reader_sptr gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload, gr_block_sptr link);
+  friend GR_CORE_API gr_buffer_sptr gr_make_buffer (int nitems, size_t sizeof_item, gr_block_sptr link);
+  friend GR_CORE_API gr_buffer_reader_sptr gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload, gr_block_sptr link);
 
  protected:
   char				       *d_base;		// base address of buffer
@@ -192,11 +193,11 @@ class gr_buffer {
  * \param nzero_preload -- number of zero items to "preload" into buffer.
  * \param link is the block that reads from the buffer using this gr_buffer_reader.
  */
-gr_buffer_reader_sptr 
+GR_CORE_API gr_buffer_reader_sptr 
 gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload, gr_block_sptr link=gr_block_sptr());
 
 //! returns # of gr_buffers currently allocated
-long gr_buffer_ncurrently_allocated ();
+GR_CORE_API long gr_buffer_ncurrently_allocated ();
 
 
 // ---------------------------------------------------------------------------
@@ -206,7 +207,7 @@ long gr_buffer_ncurrently_allocated ();
  * \ingroup internal
  */
 
-class gr_buffer_reader {
+class GR_CORE_API gr_buffer_reader {
  public:
 
   ~gr_buffer_reader ();
@@ -276,7 +277,7 @@ class gr_buffer_reader {
  private:
 
   friend class gr_buffer;
-  friend gr_buffer_reader_sptr 
+  friend GR_CORE_API gr_buffer_reader_sptr 
   gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload, gr_block_sptr link);
 
 
@@ -290,7 +291,7 @@ class gr_buffer_reader {
 };
 
 //! returns # of gr_buffer_readers currently allocated
-long gr_buffer_reader_ncurrently_allocated ();
+GR_CORE_API long gr_buffer_reader_ncurrently_allocated ();
 
 
 #endif /* INCLUDED_GR_BUFFER_H */
diff --git a/gnuradio-core/src/lib/runtime/gr_dispatcher.h b/gnuradio-core/src/lib/runtime/gr_dispatcher.h
index 34f825102e..735974766a 100644
--- a/gnuradio-core/src/lib/runtime/gr_dispatcher.h
+++ b/gnuradio-core/src/lib/runtime/gr_dispatcher.h
@@ -23,14 +23,15 @@
 #ifndef INCLUDED_GR_DISPATCHER_H
 #define INCLUDED_GR_DISPATCHER_H
 
+#include <gr_core_api.h>
 #include <gr_select_handler.h>
 #include <vector>
 
 class gr_dispatcher;
 typedef boost::shared_ptr<gr_dispatcher> gr_dispatcher_sptr;
 
-gr_dispatcher_sptr gr_dispatcher_singleton();
-gr_dispatcher_sptr gr_make_dispatcher();
+GR_CORE_API gr_dispatcher_sptr gr_dispatcher_singleton();
+GR_CORE_API gr_dispatcher_sptr gr_make_dispatcher();
 
 /*!
  * \brief invoke callbacks based on select.
@@ -38,10 +39,10 @@ gr_dispatcher_sptr gr_make_dispatcher();
  *
  * \sa gr_select_handler
  */
-class gr_dispatcher
+class GR_CORE_API gr_dispatcher
 {
   gr_dispatcher();
-  friend gr_dispatcher_sptr gr_make_dispatcher();
+  friend GR_CORE_API gr_dispatcher_sptr gr_make_dispatcher();
 
   std::vector<gr_select_handler_sptr> d_handler;
   int			      	      d_max_index;
diff --git a/gnuradio-core/src/lib/runtime/gr_error_handler.h b/gnuradio-core/src/lib/runtime/gr_error_handler.h
index aedb6f41fe..4c30791f2f 100644
--- a/gnuradio-core/src/lib/runtime/gr_error_handler.h
+++ b/gnuradio-core/src/lib/runtime/gr_error_handler.h
@@ -43,6 +43,7 @@
 #ifndef INCLUDED_GR_ERROR_HANDLER_H
 #define INCLUDED_GR_ERROR_HANDLER_H
 
+#include <gr_core_api.h>
 #include <stdarg.h>
 #include <string>
 #include <cstdio>  // for FILE
@@ -51,7 +52,7 @@
  * \brief abstract error handler
  * \ingroup base
  */
-class gr_error_handler {
+class GR_CORE_API gr_error_handler {
 public:
   enum seriousness {
     ERR_DEBUG		= 0x00000000,
@@ -90,7 +91,7 @@ protected:
 };
 
 
-class gr_base_error_handler : public gr_error_handler {
+class GR_CORE_API gr_base_error_handler : public gr_error_handler {
   int	d_nwarnings;
   int	d_nerrors;
 
@@ -102,7 +103,7 @@ public:
   void count_error(seriousness s);
 };
 
-class gr_file_error_handler : public gr_base_error_handler {
+class GR_CORE_API gr_file_error_handler : public gr_base_error_handler {
   FILE		*d_file;
   int		 d_fd;
 public:
diff --git a/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h b/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h
index 8e9834337b..2cc883686f 100644
--- a/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h
+++ b/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h
@@ -23,22 +23,23 @@
 #ifndef INCLUDED_GR_FLAT_FLOWGRAPH_H
 #define INCLUDED_GR_FLAT_FLOWGRAPH_H
 
+#include <gr_core_api.h>
 #include <gr_flowgraph.h>
 #include <gr_block.h>
 
 // Create a shared pointer to a heap allocated gr_flat_flowgraph
 // (types defined in gr_runtime_types.h)
-gr_flat_flowgraph_sptr gr_make_flat_flowgraph();
+GR_CORE_API gr_flat_flowgraph_sptr gr_make_flat_flowgraph();
 
 /*!
  *\brief Class specializing gr_flat_flowgraph that has all nodes
  * as gr_blocks, with no hierarchy
  * \ingroup internal
  */
-class gr_flat_flowgraph : public gr_flowgraph
+class GR_CORE_API gr_flat_flowgraph : public gr_flowgraph
 {
 public:
-  friend gr_flat_flowgraph_sptr gr_make_flat_flowgraph();
+  friend GR_CORE_API gr_flat_flowgraph_sptr gr_make_flat_flowgraph();
 
   // Destruct an arbitrary gr_flat_flowgraph
   ~gr_flat_flowgraph();
diff --git a/gnuradio-core/src/lib/runtime/gr_flowgraph.h b/gnuradio-core/src/lib/runtime/gr_flowgraph.h
index 8e988506bb..8f9a8ba710 100644
--- a/gnuradio-core/src/lib/runtime/gr_flowgraph.h
+++ b/gnuradio-core/src/lib/runtime/gr_flowgraph.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_FLOWGRAPH_H
 #define INCLUDED_GR_FLOWGRAPH_H
 
+#include <gr_core_api.h>
 #include <gr_basic_block.h>
 #include <iostream>
 
@@ -30,7 +31,7 @@
  * \brief Class representing a specific input or output graph endpoint
  * \ingroup internal
  */
-class gr_endpoint
+class GR_CORE_API gr_endpoint
 {
 private:
   gr_basic_block_sptr d_basic_block;
@@ -59,7 +60,7 @@ typedef std::vector<gr_endpoint>::iterator gr_endpoint_viter_t;
  *\brief Class representing a connection between to graph endpoints
  *
  */
-class gr_edge
+class GR_CORE_API gr_edge
 {
 public:
   gr_edge() : d_src(), d_dst() { };
@@ -81,16 +82,16 @@ typedef std::vector<gr_edge>::iterator gr_edge_viter_t;
 
 // Create a shared pointer to a heap allocated flowgraph
 // (types defined in gr_runtime_types.h)
-gr_flowgraph_sptr gr_make_flowgraph();
+GR_CORE_API gr_flowgraph_sptr gr_make_flowgraph();
 
 /*!
  * \brief Class representing a directed, acyclic graph of basic blocks
  * \ingroup internal
  */
-class gr_flowgraph
+class GR_CORE_API gr_flowgraph
 {
 public:
-  friend gr_flowgraph_sptr gr_make_flowgraph();
+  friend GR_CORE_API gr_flowgraph_sptr gr_make_flowgraph();
 
   // Destruct an arbitrary flowgraph
   ~gr_flowgraph();
diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2.h b/gnuradio-core/src/lib/runtime/gr_hier_block2.h
index 0a40c36b79..8687b7d99e 100644
--- a/gnuradio-core/src/lib/runtime/gr_hier_block2.h
+++ b/gnuradio-core/src/lib/runtime/gr_hier_block2.h
@@ -22,13 +22,14 @@
 #ifndef INCLUDED_GR_HIER_BLOCK2_H
 #define INCLUDED_GR_HIER_BLOCK2_H
 
+#include <gr_core_api.h>
 #include <gr_basic_block.h>
 
 /*!
  * \brief public constructor for gr_hier_block2
 
  */
-gr_hier_block2_sptr gr_make_hier_block2(const std::string &name,
+GR_CORE_API gr_hier_block2_sptr gr_make_hier_block2(const std::string &name,
                                         gr_io_signature_sptr input_signature,
                                         gr_io_signature_sptr output_signature);
 
@@ -40,11 +41,11 @@ class gr_hier_block2_detail;
  * \ingroup base_blk
  *
  */
-class gr_hier_block2 : public gr_basic_block
+class GR_CORE_API gr_hier_block2 : public gr_basic_block
 {
 private:
   friend class gr_hier_block2_detail;
-  friend gr_hier_block2_sptr gr_make_hier_block2(const std::string &name,
+  friend GR_CORE_API gr_hier_block2_sptr gr_make_hier_block2(const std::string &name,
 						 gr_io_signature_sptr input_signature,
 						 gr_io_signature_sptr output_signature);
   
diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h b/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
index 6f5384e5a4..5a77d6a034 100644
--- a/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
+++ b/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_HIER_BLOCK2_DETAIL_H
 #define INCLUDED_GR_HIER_BLOCK2_DETAIL_H
 
+#include <gr_core_api.h>
 #include <gr_hier_block2.h>
 #include <gr_flat_flowgraph.h>
 #include <boost/utility.hpp>
@@ -29,7 +30,7 @@
 /*!
  * \ingroup internal
  */
-class gr_hier_block2_detail : boost::noncopyable
+class GR_CORE_API gr_hier_block2_detail : boost::noncopyable
 {
 public:
   gr_hier_block2_detail(gr_hier_block2 *owner);
diff --git a/gnuradio-core/src/lib/runtime/gr_io_signature.h b/gnuradio-core/src/lib/runtime/gr_io_signature.h
index 5d194cf55e..11c6b7f131 100644
--- a/gnuradio-core/src/lib/runtime/gr_io_signature.h
+++ b/gnuradio-core/src/lib/runtime/gr_io_signature.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_IO_SIGNATURE_H
 #define INCLUDED_IO_SIGNATURE_H
 
+#include <gr_core_api.h>
 #include <gr_runtime_types.h>
 
 /*!
@@ -33,7 +34,7 @@
  * \param max_streams  specify maximum number of streams (>= min_streams or -1 -> infinite)
  * \param sizeof_stream_item  specify the size of the items in each stream
  */
-gr_io_signature_sptr
+GR_CORE_API gr_io_signature_sptr
 gr_make_io_signature(int min_streams, int max_streams,
 		     int sizeof_stream_item);
 
@@ -45,7 +46,7 @@ gr_make_io_signature(int min_streams, int max_streams,
  * \param sizeof_stream_item1 specify the size of the items in the first stream
  * \param sizeof_stream_item2 specify the size of the items in the second and subsequent streams
  */
-gr_io_signature_sptr
+GR_CORE_API gr_io_signature_sptr
 gr_make_io_signature2(int min_streams, int max_streams,
 		      int sizeof_stream_item1,
 		      int sizeof_stream_item2
@@ -60,7 +61,7 @@ gr_make_io_signature2(int min_streams, int max_streams,
  * \param sizeof_stream_item2 specify the size of the items in the second stream
  * \param sizeof_stream_item3 specify the size of the items in the third and subsequent streams
  */
-gr_io_signature_sptr
+GR_CORE_API gr_io_signature_sptr
 gr_make_io_signature3(int min_streams, int max_streams, 
 		      int sizeof_stream_item1,
 		      int sizeof_stream_item2,
@@ -78,7 +79,7 @@ gr_make_io_signature3(int min_streams, int max_streams,
  * value of the last entry in sizeof_stream_items is used for the missing values.
  * sizeof_stream_items must contain at least 1 entry.
  */
-gr_io_signature_sptr
+GR_CORE_API gr_io_signature_sptr
 gr_make_io_signaturev(int min_streams, int max_streams,
 		      const std::vector<int> &sizeof_stream_items);
 
@@ -87,7 +88,7 @@ gr_make_io_signaturev(int min_streams, int max_streams,
  * \brief i/o signature for input and output ports.
  * \brief misc
  */
-class gr_io_signature {
+class GR_CORE_API gr_io_signature {
   int			d_min_streams;
   int			d_max_streams;
   std::vector<int>	d_sizeof_stream_item;
@@ -95,7 +96,7 @@ class gr_io_signature {
   gr_io_signature(int min_streams, int max_streams,
 		  const std::vector<int> &sizeof_stream_items);
 
-  friend gr_io_signature_sptr 
+  friend GR_CORE_API gr_io_signature_sptr 
   gr_make_io_signaturev(int min_streams,
 			int max_streams,
 			const std::vector<int> &sizeof_stream_items);
diff --git a/gnuradio-core/src/lib/runtime/gr_local_sighandler.h b/gnuradio-core/src/lib/runtime/gr_local_sighandler.h
index 6b60cf09a8..9e4eacc479 100644
--- a/gnuradio-core/src/lib/runtime/gr_local_sighandler.h
+++ b/gnuradio-core/src/lib/runtime/gr_local_sighandler.h
@@ -27,6 +27,7 @@
 #include <signal.h>
 #endif
 
+#include <gr_core_api.h>
 #include <string>
 
 /*!
@@ -36,7 +37,7 @@
  * Constructor installs new handler, destructor reinstalls
  * original value.
  */
-class gr_local_sighandler {
+class GR_CORE_API gr_local_sighandler {
   int			d_signum;
 #ifdef HAVE_SIGACTION
   struct sigaction	d_old_action;
@@ -52,7 +53,7 @@ public:
 /*!
  * \brief Representation of signal.
  */
-class gr_signal
+class GR_CORE_API gr_signal
 {
   int	d_signum;
 public:
diff --git a/gnuradio-core/src/lib/runtime/gr_message.h b/gnuradio-core/src/lib/runtime/gr_message.h
index 179f7d9bc5..ead002616b 100644
--- a/gnuradio-core/src/lib/runtime/gr_message.h
+++ b/gnuradio-core/src/lib/runtime/gr_message.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_MESSAGE_H
 #define INCLUDED_GR_MESSAGE_H
 
+#include <gr_core_api.h>
 #include <gr_types.h>
 #include <string>
 
@@ -31,10 +32,10 @@ typedef boost::shared_ptr<gr_message> gr_message_sptr;
 /*!
  * \brief public constructor for gr_message
  */
-gr_message_sptr 
+GR_CORE_API gr_message_sptr 
 gr_make_message(long type = 0, double arg1 = 0, double arg2 = 0, size_t length = 0);
 
-gr_message_sptr
+GR_CORE_API gr_message_sptr
 gr_make_message_from_string(const std::string s, long type = 0, double arg1 = 0, double arg2 = 0);
 
 /*!
@@ -44,7 +45,7 @@ gr_make_message_from_string(const std::string s, long type = 0, double arg1 = 0,
  * The ideas and method names for adjustable message length were
  * lifted from the click modular router "Packet" class.
  */
-class gr_message {
+class GR_CORE_API gr_message {
   gr_message_sptr d_next;	// link field for msg queue
   long		  d_type;	// type of the message
   double	  d_arg1;	// optional arg1
@@ -57,10 +58,10 @@ class gr_message {
   
   gr_message (long type, double arg1, double arg2, size_t length);
 
-  friend gr_message_sptr
+  friend GR_CORE_API gr_message_sptr
     gr_make_message (long type, double arg1, double arg2, size_t length);
 
-  friend gr_message_sptr
+  friend GR_CORE_API gr_message_sptr
     gr_make_message_from_string (const std::string s, long type, double arg1, double arg2);
 
   friend class gr_msg_queue;
@@ -85,6 +86,6 @@ public:
 
 };
 
-long gr_message_ncurrently_allocated ();
+GR_CORE_API long gr_message_ncurrently_allocated ();
 
 #endif /* INCLUDED_GR_MESSAGE_H */
diff --git a/gnuradio-core/src/lib/runtime/gr_msg_accepter.h b/gnuradio-core/src/lib/runtime/gr_msg_accepter.h
index 79a631f3a6..4aec127a9b 100644
--- a/gnuradio-core/src/lib/runtime/gr_msg_accepter.h
+++ b/gnuradio-core/src/lib/runtime/gr_msg_accepter.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_MSG_ACCEPTER_H
 #define INCLUDED_GR_MSG_ACCEPTER_H
 
+#include <gr_core_api.h>
 #include <gruel/msg_accepter.h>
 #include <gruel/pmt.h>
 
@@ -29,7 +30,7 @@
  * \brief Accepts messages and inserts them into a message queue, then notifies
  * subclass gr_basic_block there is a message pending.
  */
-class gr_msg_accepter : public gruel::msg_accepter
+class GR_CORE_API gr_msg_accepter : public gruel::msg_accepter
 {
 public:
   gr_msg_accepter();
diff --git a/gnuradio-core/src/lib/runtime/gr_msg_handler.h b/gnuradio-core/src/lib/runtime/gr_msg_handler.h
index 774dce73e7..ebe3ffe37c 100644
--- a/gnuradio-core/src/lib/runtime/gr_msg_handler.h
+++ b/gnuradio-core/src/lib/runtime/gr_msg_handler.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_MSG_HANDLER_H
 #define INCLUDED_GR_MSG_HANDLER_H
 
+#include <gr_core_api.h>
 #include <gr_message.h>
 
 class gr_msg_handler;
@@ -31,7 +32,7 @@ typedef boost::shared_ptr<gr_msg_handler> gr_msg_handler_sptr;
  * \brief abstract class of message handlers
  * \ingroup base
  */
-class gr_msg_handler {
+class GR_CORE_API gr_msg_handler {
 public:
   virtual ~gr_msg_handler ();
   
diff --git a/gnuradio-core/src/lib/runtime/gr_msg_queue.h b/gnuradio-core/src/lib/runtime/gr_msg_queue.h
index 477b1ddf1b..bf7b89882c 100644
--- a/gnuradio-core/src/lib/runtime/gr_msg_queue.h
+++ b/gnuradio-core/src/lib/runtime/gr_msg_queue.h
@@ -22,19 +22,20 @@
 #ifndef INCLUDED_GR_MSG_QUEUE_H
 #define INCLUDED_GR_MSG_QUEUE_H
 
+#include <gr_core_api.h>
 #include <gr_msg_handler.h>
 #include <gruel/thread.h>
 
 class gr_msg_queue;
 typedef boost::shared_ptr<gr_msg_queue> gr_msg_queue_sptr;
 
-gr_msg_queue_sptr gr_make_msg_queue(unsigned int limit=0);
+GR_CORE_API gr_msg_queue_sptr gr_make_msg_queue(unsigned int limit=0);
 
 /*!
  * \brief thread-safe message queue
  * \ingroup misc
  */
-class gr_msg_queue : public gr_msg_handler {
+class GR_CORE_API gr_msg_queue : public gr_msg_handler {
 
   gruel::mutex		    d_mutex;
   gruel::condition_variable d_not_empty;
diff --git a/gnuradio-core/src/lib/runtime/gr_pagesize.h b/gnuradio-core/src/lib/runtime/gr_pagesize.h
index 3c1b8eb6b1..60dad42c99 100644
--- a/gnuradio-core/src/lib/runtime/gr_pagesize.h
+++ b/gnuradio-core/src/lib/runtime/gr_pagesize.h
@@ -22,11 +22,13 @@
 #ifndef _GR_PAGESIZE_H_
 #define _GR_PAGESIZE_H_
 
+#include <gr_core_api.h>
+
 /*!
  * \brief return the page size in bytes
  */
 
-int gr_pagesize ();
+GR_CORE_API int gr_pagesize ();
 
 
-#endif /* _GR_PAGESIZE_H_ */
+#endif /* _GR_PAGESIZE_H_ */
\ No newline at end of file
diff --git a/gnuradio-core/src/lib/runtime/gr_preferences.h b/gnuradio-core/src/lib/runtime/gr_preferences.h
index 7f2a25e6b7..ab4dc0cb0f 100644
--- a/gnuradio-core/src/lib/runtime/gr_preferences.h
+++ b/gnuradio-core/src/lib/runtime/gr_preferences.h
@@ -23,10 +23,12 @@
 #ifndef _GR_PREFERENCES_H_
 #define _GR_PREFERENCES_H_
 
-class gr_preferences {
+#include <gr_core_api.h>
+
+class GR_CORE_API gr_preferences {
  public:
   static const char *get (const char *key);
   static void set (const char *key, const char *value);
 };
 
-#endif /* _GR_PREFERENCES_H_ */
+#endif /* _GR_PREFERENCES_H_ */
\ No newline at end of file
diff --git a/gnuradio-core/src/lib/runtime/gr_realtime.h b/gnuradio-core/src/lib/runtime/gr_realtime.h
index 830c201d76..58db83086c 100644
--- a/gnuradio-core/src/lib/runtime/gr_realtime.h
+++ b/gnuradio-core/src/lib/runtime/gr_realtime.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_REALTIME_H
 #define INCLUDED_GR_REALTIME_H
 
+#include <gr_core_api.h>
 #include <gruel/realtime.h>
 
 typedef gruel::rt_status_t gr_rt_status_t;
@@ -31,6 +32,6 @@ typedef gruel::rt_status_t gr_rt_status_t;
  * \brief If possible, enable high-priority "real time" scheduling.
  * \ingroup misc
  */
-gr_rt_status_t gr_enable_realtime_scheduling();
+GR_CORE_API gr_rt_status_t gr_enable_realtime_scheduling();
 
 #endif /* INCLUDED_GR_REALTIME_H */
diff --git a/gnuradio-core/src/lib/runtime/gr_runtime_types.h b/gnuradio-core/src/lib/runtime/gr_runtime_types.h
index 74d2614a83..98f08b4176 100644
--- a/gnuradio-core/src/lib/runtime/gr_runtime_types.h
+++ b/gnuradio-core/src/lib/runtime/gr_runtime_types.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_RUNTIME_TYPES_H
 #define INCLUDED_GR_RUNTIME_TYPES_H
 
+#include <gr_core_api.h>
 #include <gr_types.h>
 
 /*
diff --git a/gnuradio-core/src/lib/runtime/gr_scheduler.h b/gnuradio-core/src/lib/runtime/gr_scheduler.h
index 13bc1ff145..4e97b5881c 100644
--- a/gnuradio-core/src/lib/runtime/gr_scheduler.h
+++ b/gnuradio-core/src/lib/runtime/gr_scheduler.h
@@ -22,6 +22,7 @@
 #ifndef INCLUDED_GR_SCHEDULER_H
 #define INCLUDED_GR_SCHEDULER_H
 
+#include <gr_core_api.h>
 #include <boost/utility.hpp>
 #include <gr_block.h>
 #include <gr_flat_flowgraph.h>
@@ -36,7 +37,7 @@ typedef boost::shared_ptr<gr_scheduler> gr_scheduler_sptr;
  *
  * Preconditions: details, buffers and buffer readers have been assigned.
  */
-class gr_scheduler : boost::noncopyable
+class GR_CORE_API gr_scheduler : boost::noncopyable
 {
 
 public:
diff --git a/gnuradio-core/src/lib/runtime/gr_scheduler_sts.h b/gnuradio-core/src/lib/runtime/gr_scheduler_sts.h
index 4cf8351561..9b73b68c1e 100644
--- a/gnuradio-core/src/lib/runtime/gr_scheduler_sts.h
+++ b/gnuradio-core/src/lib/runtime/gr_scheduler_sts.h
@@ -21,13 +21,14 @@
 #ifndef INCLUDED_GR_SCHEDULER_STS_H
 #define INCLUDED_GR_SCHEDULER_STS_H
 
+#include <gr_core_api.h>
 #include <gr_scheduler.h>
 #include <gruel/thread_group.h>
 
 /*!
  * \brief Concrete scheduler that uses the single_threaded_scheduler
  */
-class gr_scheduler_sts : public gr_scheduler
+class GR_CORE_API gr_scheduler_sts : public gr_scheduler
 {
   gruel::thread_group		       d_threads;
 
diff --git a/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.h b/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.h
index 16a0c0204e..f97ab2e7f2 100644
--- a/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.h
+++ b/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.h
@@ -21,13 +21,14 @@
 #ifndef INCLUDED_GR_SCHEDULER_TPB_H
 #define INCLUDED_GR_SCHEDULER_TPB_H
 
+#include <gr_core_api.h>
 #include <gr_scheduler.h>
 #include <gruel/thread_group.h>
 
 /*!
  * \brief Concrete scheduler that uses a kernel thread-per-block
  */
-class gr_scheduler_tpb : public gr_scheduler
+class GR_CORE_API gr_scheduler_tpb : public gr_scheduler
 {
   gruel::thread_group		       d_threads;
 
diff --git a/gnuradio-core/src/lib/runtime/gr_select_handler.h b/gnuradio-core/src/lib/runtime/gr_select_handler.h
index c3808995bd..532707a025 100644
--- a/gnuradio-core/src/lib/runtime/gr_select_handler.h
+++ b/gnuradio-core/src/lib/runtime/gr_select_handler.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_SELECT_HANDLER_H
 #define INCLUDED_GR_SELECT_HANDLER_H
 
+#include <gr_core_api.h>
 #include <boost/shared_ptr.hpp>
 
 class gr_select_handler;
@@ -35,7 +36,7 @@ typedef boost::shared_ptr<gr_select_handler> gr_select_handler_sptr;
  *
  * \sa gr_dispatcher
  */
-class gr_select_handler
+class GR_CORE_API gr_select_handler
 {
   int	d_fd;
 
diff --git a/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.h b/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.h
index 060d3017d4..17f4a1c540 100644
--- a/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.h
+++ b/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_SINGLE_THREADED_SCHEDULER_H
 #define INCLUDED_GR_SINGLE_THREADED_SCHEDULER_H
 
+#include <gr_core_api.h>
 #include <gr_runtime_types.h>
 #include <fstream>
 
@@ -35,7 +36,7 @@ typedef boost::shared_ptr<gr_single_threaded_scheduler>	gr_single_threaded_sched
  * \ingroup internal
  */
 
-class gr_single_threaded_scheduler {
+class GR_CORE_API gr_single_threaded_scheduler {
  public:
   ~gr_single_threaded_scheduler ();
 
@@ -51,11 +52,11 @@ class gr_single_threaded_scheduler {
 
   void main_loop ();
   
-  friend gr_single_threaded_scheduler_sptr
+  friend GR_CORE_API gr_single_threaded_scheduler_sptr
   gr_make_single_threaded_scheduler (const std::vector<gr_block_sptr> &blocks);
 };
 
-gr_single_threaded_scheduler_sptr
+GR_CORE_API gr_single_threaded_scheduler_sptr
 gr_make_single_threaded_scheduler (const std::vector<gr_block_sptr> &blocks);
 
 #endif /* INCLUDED_GR_SINGLE_THREADED_SCHEDULER_H */
diff --git a/gnuradio-core/src/lib/runtime/gr_sptr_magic.h b/gnuradio-core/src/lib/runtime/gr_sptr_magic.h
index 872374ab6a..4b7f9899da 100644
--- a/gnuradio-core/src/lib/runtime/gr_sptr_magic.h
+++ b/gnuradio-core/src/lib/runtime/gr_sptr_magic.h
@@ -21,6 +21,7 @@
 #ifndef INCLUDED_GR_SPTR_MAGIC_H
 #define INCLUDED_GR_SPTR_MAGIC_H
 
+#include <gr_core_api.h>
 #include <boost/shared_ptr.hpp>
 
 class gr_basic_block;
@@ -30,7 +31,7 @@ namespace gnuradio {
 
   namespace detail {
     
-    class sptr_magic {
+    class GR_CORE_API sptr_magic {
     public:
       static boost::shared_ptr<gr_basic_block> fetch_initial_sptr(gr_basic_block *p);
       static void create_and_stash_initial_sptr(gr_hier_block2 *p);
diff --git a/gnuradio-core/src/lib/runtime/gr_sync_block.h b/gnuradio-core/src/lib/runtime/gr_sync_block.h
index c5a6a50f1a..808c1c18a6 100644
--- a/gnuradio-core/src/lib/runtime/gr_sync_block.h
+++ b/gnuradio-core/src/lib/runtime/gr_sync_block.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_SYNC_BLOCK_H
 #define INCLUDED_GR_SYNC_BLOCK_H
 
+#include <gr_core_api.h>
 #include <gr_block.h>
 
 /*!
@@ -31,7 +32,7 @@
  *
  * Override work to provide the signal processing implementation.
  */
-class gr_sync_block : public gr_block
+class GR_CORE_API gr_sync_block : public gr_block
 {
  protected:
   gr_sync_block (void){} //allows pure virtual interface sub-classes
diff --git a/gnuradio-core/src/lib/runtime/gr_sync_decimator.h b/gnuradio-core/src/lib/runtime/gr_sync_decimator.h
index 12cd541951..b2ed3c4fe5 100644
--- a/gnuradio-core/src/lib/runtime/gr_sync_decimator.h
+++ b/gnuradio-core/src/lib/runtime/gr_sync_decimator.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_SYNC_DECIMATOR_H
 #define INCLUDED_GR_SYNC_DECIMATOR_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 /*!
@@ -31,7 +32,7 @@
  *
  * Override work to provide the signal processing implementation.
  */
-class gr_sync_decimator : public gr_sync_block
+class GR_CORE_API gr_sync_decimator : public gr_sync_block
 {
  private:
   unsigned	d_decimation;
diff --git a/gnuradio-core/src/lib/runtime/gr_sync_interpolator.h b/gnuradio-core/src/lib/runtime/gr_sync_interpolator.h
index 0363bc55c0..d65b3da1e5 100644
--- a/gnuradio-core/src/lib/runtime/gr_sync_interpolator.h
+++ b/gnuradio-core/src/lib/runtime/gr_sync_interpolator.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_SYNC_INTERPOLATOR_H
 #define INCLUDED_GR_SYNC_INTERPOLATOR_H
 
+#include <gr_core_api.h>
 #include <gr_sync_block.h>
 
 /*!
@@ -31,7 +32,7 @@
  *
  * Override work to provide the signal processing implementation.
  */
-class gr_sync_interpolator : public gr_sync_block
+class GR_CORE_API gr_sync_interpolator : public gr_sync_block
 {
  private:
   unsigned	d_interpolation;
diff --git a/gnuradio-core/src/lib/runtime/gr_sys_paths.h b/gnuradio-core/src/lib/runtime/gr_sys_paths.h
index aa82497752..1f1759c36a 100644
--- a/gnuradio-core/src/lib/runtime/gr_sys_paths.h
+++ b/gnuradio-core/src/lib/runtime/gr_sys_paths.h
@@ -22,10 +22,12 @@
 #ifndef _GR_SYS_PATHS_H_
 #define _GR_SYS_PATHS_H_
 
+#include <gr_core_api.h>
+
 //! directory to create temporary files
-const char *gr_tmp_path();
+GR_CORE_API const char *gr_tmp_path();
 
 //! directory to store application data
-const char *gr_appdata_path();
+GR_CORE_API const char *gr_appdata_path();
 
 #endif /* _GR_SYS_PATHS_H_ */
diff --git a/gnuradio-core/src/lib/runtime/gr_timer.h b/gnuradio-core/src/lib/runtime/gr_timer.h
index ff14e315d0..fa3c06ece2 100644
--- a/gnuradio-core/src/lib/runtime/gr_timer.h
+++ b/gnuradio-core/src/lib/runtime/gr_timer.h
@@ -22,13 +22,14 @@
 #ifndef INCLUDED_GR_TIMER_H
 #define INCLUDED_GR_TIMER_H
 
+#include <gr_core_api.h>
 #include <gr_types.h>
 
 class gr_timer;
 
 typedef boost::shared_ptr<gr_timer> gr_timer_sptr;
 
-typedef void (*gr_timer_hook)(gr_timer *, void *);
+GR_CORE_API typedef void (*gr_timer_hook)(gr_timer *, void *);
 
 /*!
  * \brief create a timeout.
@@ -36,18 +37,18 @@ typedef void (*gr_timer_hook)(gr_timer *, void *);
  * \ingroup misc
  * gr_timer_hook is called when timer fires.
  */
-gr_timer_sptr gr_make_timer (gr_timer_hook, void *);
+GR_CORE_API gr_timer_sptr gr_make_timer (gr_timer_hook, void *);
 
 /*!
  * \brief implement timeouts
  */
-class gr_timer {
+class GR_CORE_API gr_timer {
   double	d_expiry;
   double	d_period;
   gr_timer_hook	d_hook;
   void	       *d_hook_arg;
 
-  friend gr_timer_sptr gr_make_timer (gr_timer_hook, void *);
+  friend GR_CORE_API gr_timer_sptr gr_make_timer (gr_timer_hook, void *);
 
   gr_timer (...);
 
diff --git a/gnuradio-core/src/lib/runtime/gr_top_block.h b/gnuradio-core/src/lib/runtime/gr_top_block.h
index ed244cb7c5..fca68ae712 100644
--- a/gnuradio-core/src/lib/runtime/gr_top_block.h
+++ b/gnuradio-core/src/lib/runtime/gr_top_block.h
@@ -23,21 +23,22 @@
 #ifndef INCLUDED_GR_TOP_BLOCK_H
 #define INCLUDED_GR_TOP_BLOCK_H
 
+#include <gr_core_api.h>
 #include <gr_hier_block2.h>
 
 class gr_top_block_impl;
 
-gr_top_block_sptr gr_make_top_block(const std::string &name);
+GR_CORE_API gr_top_block_sptr gr_make_top_block(const std::string &name);
 
 /*!
  *\brief Top-level hierarchical block representing a flowgraph
  * \ingroup container_blk
  *
  */
-class gr_top_block : public gr_hier_block2
+class GR_CORE_API gr_top_block : public gr_hier_block2
 {
 private:
-  friend gr_top_block_sptr gr_make_top_block(const std::string &name);
+  friend GR_CORE_API gr_top_block_sptr gr_make_top_block(const std::string &name);
 
   gr_top_block_impl *d_impl;
 
diff --git a/gnuradio-core/src/lib/runtime/gr_top_block_impl.h b/gnuradio-core/src/lib/runtime/gr_top_block_impl.h
index ef28dd8292..904443be57 100644
--- a/gnuradio-core/src/lib/runtime/gr_top_block_impl.h
+++ b/gnuradio-core/src/lib/runtime/gr_top_block_impl.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_TOP_BLOCK_IMPL_H
 #define INCLUDED_GR_TOP_BLOCK_IMPL_H
 
+#include <gr_core_api.h>
 #include <gr_scheduler.h>
 #include <gruel/thread.h>
 
@@ -34,7 +35,7 @@
  * decoupling of changes from dependent classes.
  *
  */
-class gr_top_block_impl
+class GR_CORE_API gr_top_block_impl
 {
 public:
   gr_top_block_impl(gr_top_block *owner);
diff --git a/gnuradio-core/src/lib/runtime/gr_tpb_detail.h b/gnuradio-core/src/lib/runtime/gr_tpb_detail.h
index acfa264c7c..90908c2f52 100644
--- a/gnuradio-core/src/lib/runtime/gr_tpb_detail.h
+++ b/gnuradio-core/src/lib/runtime/gr_tpb_detail.h
@@ -21,6 +21,7 @@
 #ifndef INCLUDED_GR_TPB_DETAIL_H
 #define INCLUDED_GR_TPB_DETAIL_H
 
+#include <gr_core_api.h>
 #include <gruel/thread.h>
 #include <deque>
 #include <gruel/pmt.h>
@@ -30,7 +31,7 @@ class gr_block_detail;
 /*!
  * \brief used by thread-per-block scheduler
  */
-struct gr_tpb_detail {
+struct GR_CORE_API gr_tpb_detail {
 
   gruel::mutex			mutex;			//< protects all vars
   bool				input_changed;
diff --git a/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.h b/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.h
index a630b1be9f..548cfedfbd 100644
--- a/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.h
+++ b/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.h
@@ -21,6 +21,7 @@
 #ifndef INCLUDED_GR_TPB_THREAD_BODY_H
 #define INCLUDED_GR_TPB_THREAD_BODY_H
 
+#include <gr_core_api.h>
 #include <gr_block_executor.h>
 #include <gr_block.h>
 #include <gr_block_detail.h>
@@ -33,7 +34,7 @@
  * done or is interrupted.
  */
 
-class gr_tpb_thread_body {
+class GR_CORE_API gr_tpb_thread_body {
   gr_block_executor	d_exec;
 
 public:
diff --git a/gnuradio-core/src/lib/runtime/gr_types.h b/gnuradio-core/src/lib/runtime/gr_types.h
index ad8f145b88..fd5ca7758a 100644
--- a/gnuradio-core/src/lib/runtime/gr_types.h
+++ b/gnuradio-core/src/lib/runtime/gr_types.h
@@ -23,6 +23,7 @@
 #ifndef INCLUDED_GR_TYPES_H
 #define INCLUDED_GR_TYPES_H
 
+#include <gr_core_api.h>
 #include <boost/shared_ptr.hpp>
 #include <vector>
 #include <stddef.h>				// size_t
diff --git a/gnuradio-core/src/lib/runtime/gr_unittests.h b/gnuradio-core/src/lib/runtime/gr_unittests.h
index 59149bb2e0..7161b31e71 100644
--- a/gnuradio-core/src/lib/runtime/gr_unittests.h
+++ b/gnuradio-core/src/lib/runtime/gr_unittests.h
@@ -24,12 +24,14 @@
 #include "config.h"
 #endif
 
+#include <gr_core_api.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
+#include <string>
 
 #include <boost/filesystem/operations.hpp>
 #include <boost/filesystem/path.hpp>
diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf.h b/gnuradio-core/src/lib/runtime/gr_vmcircbuf.h
index a73a1559ca..0e67d405b7 100644
--- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf.h
+++ b/gnuradio-core/src/lib/runtime/gr_vmcircbuf.h
@@ -23,13 +23,14 @@
 #ifndef _GR_VMCIRCBUF_H_
 #define _GR_VMCIRCBUF_H_
 
+#include <gr_core_api.h>
 #include <vector>
 
 /*!
  * \brief abstract class to implement doubly mapped virtual memory circular buffers
  * \ingroup internal
  */
-class gr_vmcircbuf {
+class GR_CORE_API gr_vmcircbuf {
  protected:
   int	 d_size;
   char	*d_base;
@@ -48,7 +49,7 @@ class gr_vmcircbuf {
 /*!
  * \brief abstract factory for creating circular buffers
  */
-class gr_vmcircbuf_factory {
+class GR_CORE_API gr_vmcircbuf_factory {
  protected:
   gr_vmcircbuf_factory () {};
   virtual ~gr_vmcircbuf_factory ();
@@ -76,7 +77,7 @@ class gr_vmcircbuf_factory {
 /*
  * \brief pulls together all implementations of gr_vmcircbuf
  */
-class gr_vmcircbuf_sysconfig {
+class GR_CORE_API gr_vmcircbuf_sysconfig {
  public:
 
   /*
diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.h b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.h
index 9276ae98ba..5ef31f5c65 100644
--- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.h
+++ b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.h
@@ -23,6 +23,7 @@
 #ifndef _GR_VMCIRCBUF_CREATEFILEMAPPING_H_
 #define _GR_VMCIRCBUF_CREATEFILEMAPPING_H_
 
+#include <gr_core_api.h>
 #include <gr_vmcircbuf.h>
 
 #ifdef HAVE_CREATEFILEMAPPING
@@ -32,7 +33,7 @@
  * \brief concrete class to implement circular buffers with mmap and shm_open
  * \ingroup internal
  */
-class gr_vmcircbuf_createfilemapping : public gr_vmcircbuf
+class GR_CORE_API gr_vmcircbuf_createfilemapping : public gr_vmcircbuf
 {
  public:
    // CREATORS
@@ -49,7 +50,7 @@ class gr_vmcircbuf_createfilemapping : public gr_vmcircbuf
 /*!
  * \brief concrete factory for circular buffers built using mmap and shm_open
  */
-class gr_vmcircbuf_createfilemapping_factory : public gr_vmcircbuf_factory
+class GR_CORE_API gr_vmcircbuf_createfilemapping_factory : public gr_vmcircbuf_factory
 {
  private:
   static gr_vmcircbuf_factory *s_the_factory;
diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_shm_open.h b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_shm_open.h
index 238f44414b..002f5b4347 100644
--- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_shm_open.h
+++ b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_shm_open.h
@@ -23,13 +23,14 @@
 #ifndef _GR_VMCIRCBUF_MMAP_SHM_OPEN_H_
 #define _GR_VMCIRCBUF_MMAP_SHM_OPEN_H_
 
+#include <gr_core_api.h>
 #include <gr_vmcircbuf.h>
 
 /*!
  * \brief concrete class to implement circular buffers with mmap and shm_open
  * \ingroup internal
  */
-class gr_vmcircbuf_mmap_shm_open : public gr_vmcircbuf {
+class GR_CORE_API gr_vmcircbuf_mmap_shm_open : public gr_vmcircbuf {
  public:
 
   // CREATORS
@@ -41,7 +42,7 @@ class gr_vmcircbuf_mmap_shm_open : public gr_vmcircbuf {
 /*!
  * \brief concrete factory for circular buffers built using mmap and shm_open
  */
-class gr_vmcircbuf_mmap_shm_open_factory : public gr_vmcircbuf_factory {
+class GR_CORE_API gr_vmcircbuf_mmap_shm_open_factory : public gr_vmcircbuf_factory {
  private:
   static gr_vmcircbuf_factory	*s_the_factory;
 
diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.h b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.h
index e5be527688..a2ed6b87b2 100644
--- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.h
+++ b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.h
@@ -23,13 +23,14 @@
 #ifndef _GR_VMCIRCBUF_MMAP_TMPFILE_H_
 #define _GR_VMCIRCBUF_MMAP_TMPFILE_H_
 
+#include <gr_core_api.h>
 #include <gr_vmcircbuf.h>
 
 /*!
  * \brief concrete class to implement circular buffers with mmap and shm_open
  * \ingroup internal
  */
-class gr_vmcircbuf_mmap_tmpfile : public gr_vmcircbuf {
+class GR_CORE_API gr_vmcircbuf_mmap_tmpfile : public gr_vmcircbuf {
  public:
 
   // CREATORS
@@ -41,7 +42,7 @@ class gr_vmcircbuf_mmap_tmpfile : public gr_vmcircbuf {
 /*!
  * \brief concrete factory for circular buffers built using mmap and shm_open
  */
-class gr_vmcircbuf_mmap_tmpfile_factory : public gr_vmcircbuf_factory {
+class GR_CORE_API gr_vmcircbuf_mmap_tmpfile_factory : public gr_vmcircbuf_factory {
  private:
   static gr_vmcircbuf_factory	*s_the_factory;
 
diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_sysv_shm.h b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_sysv_shm.h
index cc87f8fe6b..c7a0085816 100644
--- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_sysv_shm.h
+++ b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_sysv_shm.h
@@ -23,13 +23,14 @@
 #ifndef _GR_VMCIRCBUF_SYSV_SHM_H_
 #define _GR_VMCIRCBUF_SYSV_SHM_H_
 
+#include <gr_core_api.h>
 #include <gr_vmcircbuf.h>
 
 /*!
  * \brief concrete class to implement circular buffers with mmap and shm_open
  * \ingroup internal
  */
-class gr_vmcircbuf_sysv_shm : public gr_vmcircbuf {
+class GR_CORE_API gr_vmcircbuf_sysv_shm : public gr_vmcircbuf {
  public:
 
   // CREATORS
@@ -41,7 +42,7 @@ class gr_vmcircbuf_sysv_shm : public gr_vmcircbuf {
 /*!
  * \brief concrete factory for circular buffers built using mmap and shm_open
  */
-class gr_vmcircbuf_sysv_shm_factory : public gr_vmcircbuf_factory {
+class GR_CORE_API gr_vmcircbuf_sysv_shm_factory : public gr_vmcircbuf_factory {
  private:
   static gr_vmcircbuf_factory	*s_the_factory;
 
diff --git a/gnuradio-core/src/lib/runtime/qa_runtime.h b/gnuradio-core/src/lib/runtime/qa_runtime.h
index c55208c391..e1038aaf6a 100644
--- a/gnuradio-core/src/lib/runtime/qa_runtime.h
+++ b/gnuradio-core/src/lib/runtime/qa_runtime.h
@@ -23,11 +23,12 @@
 #ifndef _QA_RUNTIME_H_
 #define _QA_RUNTIME_H_
 
+#include <gruel/attributes.h>
 #include <cppunit/TestSuite.h>
 
 //! collect all the tests for the runtime directory
 
-class qa_runtime {
+class __GR_ATTR_EXPORT qa_runtime {
  public:
   //! return suite of tests for all of runtime directory
   static CppUnit::TestSuite *suite ();
diff --git a/gnuradio-core/src/lib/swig/gnuradio_core_general.i b/gnuradio-core/src/lib/swig/gnuradio_core_general.i
index adf6b469a5..b34d4f936c 100644
--- a/gnuradio-core/src/lib/swig/gnuradio_core_general.i
+++ b/gnuradio-core/src/lib/swig/gnuradio_core_general.i
@@ -19,6 +19,8 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
+#define GR_CORE_API
+
 #ifndef SWIGIMPORTED
 %module(directors="1") gnuradio_core_general
 #endif
diff --git a/gnuradio-core/src/lib/viterbi/Makefile.am b/gnuradio-core/src/lib/viterbi/Makefile.am
index 8384c52f01..1b86a86f89 100644
--- a/gnuradio-core/src/lib/viterbi/Makefile.am
+++ b/gnuradio-core/src/lib/viterbi/Makefile.am
@@ -21,6 +21,8 @@ include $(top_srcdir)/Makefile.common
 
 LIBS = -lm
 
+AM_CPPFLAGS = -I$(top_srcdir)/gnuradio-core/src/lib/general
+
 noinst_LTLIBRARIES = libviterbi.la
 
 libviterbi_la_SOURCES = \
diff --git a/gnuradio-core/src/lib/viterbi/viterbi.h b/gnuradio-core/src/lib/viterbi/viterbi.h
index 155b0d93a3..5bb8b357a6 100644
--- a/gnuradio-core/src/lib/viterbi/viterbi.h
+++ b/gnuradio-core/src/lib/viterbi/viterbi.h
@@ -23,27 +23,31 @@
  * than we'd like for K=7, especially since we chain back every 8 bits.
  * But it fits so nicely into a 32-bit machine word...
  */
-struct viterbi_state {
+
+#include <gr_core_api.h>
+
+struct GR_CORE_API viterbi_state {
   unsigned long path;	/* Decoded path to this state */
   long metric;		/* Cumulative metric to this state */
 };
 
+GR_CORE_API
 int gen_met(int mettab[2][256],	/* Metric table */
 	    int amp,		/* Signal amplitude */
 	    double esn0,	/* Es/N0 ratio in dB */
 	    double bias, 	/* Metric bias */
 	    int scale);		/* Scale factor */
 
-unsigned char
+GR_CORE_API unsigned char
 encode(unsigned char *symbols, unsigned char *data,
        unsigned int nbytes,unsigned char encstate);
 
-void 
+GR_CORE_API void
 viterbi_chunks_init(struct viterbi_state* state);
 
-void 
+ GR_CORE_API void
 viterbi_butterfly2(unsigned char *symbols, int mettab[2][256], 
 		   struct viterbi_state *state0, struct viterbi_state *state1);
 
-unsigned char
+GR_CORE_API unsigned char
 viterbi_get_output(struct viterbi_state *state, unsigned char *outbuf);
-- 
cgit v1.2.3