diff --git a/platform/Makefile.inc b/platform/Makefile.inc
index 813ad97e0..516a1e4b2 100644
--- a/platform/Makefile.inc
+++ b/platform/Makefile.inc
@@ -8,8 +8,12 @@ lib_LTLIBRARIES = $(LIB)/libodp-linux.la
 
 AM_LDFLAGS = -version-number '$(ODP_LIBSO_VERSION)'
 
+VERSION_SCRIPT = $(srcdir)/../libodp-linux.map
+EXTRA_DIST = $(VERSION_SCRIPT)
+
 if ODP_ABI_COMPAT
-AM_LDFLAGS += -export-symbols-regex '^(_deprecated)?odp_'
+AM_LDFLAGS += -Wl,--version-script=$(VERSION_SCRIPT)
+EXTRA___LIB__libodp_linux_la_DEPENDENCIES = $(VERSION_SCRIPT)
 else
 AM_LDFLAGS += -export-symbols-regex '^(_deprecated)?_?odp_'
 endif
diff --git a/platform/libodp-linux.map b/platform/libodp-linux.map
new file mode 100644
index 000000000..868a5e3ad
--- /dev/null
+++ b/platform/libodp-linux.map
@@ -0,0 +1,600 @@
+LIBODP_LINUX_1.17 {
+  global:
+	odp_atomic_add_rel_u32;
+	odp_atomic_add_rel_u64;
+	odp_atomic_add_u32;
+	odp_atomic_add_u64;
+	odp_atomic_cas_acq_rel_u32;
+	odp_atomic_cas_acq_rel_u64;
+	odp_atomic_cas_acq_u32;
+	odp_atomic_cas_acq_u64;
+	odp_atomic_cas_rel_u32;
+	odp_atomic_cas_rel_u64;
+	odp_atomic_cas_u32;
+	odp_atomic_cas_u64;
+	odp_atomic_dec_u32;
+	odp_atomic_dec_u64;
+	odp_atomic_fetch_add_u32;
+	odp_atomic_fetch_add_u64;
+	odp_atomic_fetch_dec_u32;
+	odp_atomic_fetch_dec_u64;
+	odp_atomic_fetch_inc_u32;
+	odp_atomic_fetch_inc_u64;
+	odp_atomic_fetch_sub_u32;
+	odp_atomic_fetch_sub_u64;
+	odp_atomic_inc_u32;
+	odp_atomic_inc_u64;
+	odp_atomic_init_u32;
+	odp_atomic_init_u64;
+	odp_atomic_load_acq_u32;
+	odp_atomic_load_acq_u64;
+	odp_atomic_load_u32;
+	odp_atomic_load_u64;
+	odp_atomic_lock_free_u64;
+	odp_atomic_max_u32;
+	odp_atomic_max_u64;
+	odp_atomic_min_u32;
+	odp_atomic_min_u64;
+	odp_atomic_store_rel_u32;
+	odp_atomic_store_rel_u64;
+	odp_atomic_store_u32;
+	odp_atomic_store_u64;
+	odp_atomic_sub_rel_u32;
+	odp_atomic_sub_rel_u64;
+	odp_atomic_sub_u32;
+	odp_atomic_sub_u64;
+	odp_atomic_xchg_u32;
+	odp_atomic_xchg_u64;
+	odp_barrier_init;
+	odp_barrier_wait;
+	odp_be_to_cpu_16;
+	odp_be_to_cpu_32;
+	odp_be_to_cpu_64;
+	odp_buffer_addr;
+	odp_buffer_alloc;
+	odp_buffer_alloc_multi;
+	odp_buffer_free;
+	odp_buffer_free_multi;
+	odp_buffer_from_event;
+	odp_buffer_is_valid;
+	odp_buffer_pool;
+	odp_buffer_print;
+	odp_buffer_size;
+	odp_buffer_to_event;
+	odp_buffer_to_u64;
+	odp_chksum_ones_comp16;
+	odp_cls_capability;
+	odp_cls_cos_create;
+	odp_cls_cos_num_queue;
+	odp_cls_cos_param_init;
+	odp_cls_cos_pool;
+	odp_cls_cos_pool_set;
+	odp_cls_cos_queues;
+	odp_cls_pmr_create;
+	odp_cls_pmr_destroy;
+	odp_cls_pmr_param_init;
+	odp_cos_destroy;
+	odp_cos_drop;
+	odp_cos_drop_set;
+	odp_cos_queue;
+	odp_cos_queue_set;
+	odp_cos_to_u64;
+	odp_cos_with_l2_priority;
+	odp_cos_with_l3_qos;
+	odp_cpu_count;
+	odp_cpu_cycles;
+	odp_cpu_cycles_diff;
+	odp_cpu_cycles_max;
+	odp_cpu_cycles_resolution;
+	odp_cpu_hz;
+	odp_cpu_hz_id;
+	odp_cpu_hz_max;
+	odp_cpu_hz_max_id;
+	odp_cpu_id;
+	odp_cpumask_all_available;
+	odp_cpumask_and;
+	odp_cpumask_clr;
+	odp_cpumask_copy;
+	odp_cpumask_count;
+	odp_cpumask_default_control;
+	odp_cpumask_default_worker;
+	odp_cpumask_equal;
+	odp_cpumask_first;
+	odp_cpumask_from_str;
+	odp_cpumask_isset;
+	odp_cpumask_last;
+	odp_cpumask_next;
+	odp_cpumask_or;
+	odp_cpumask_set;
+	odp_cpumask_setall;
+	odp_cpumask_to_str;
+	odp_cpumask_xor;
+	odp_cpumask_zero;
+	odp_cpu_model_str;
+	odp_cpu_model_str_id;
+	odp_cpu_to_be_16;
+	odp_cpu_to_be_32;
+	odp_cpu_to_be_64;
+	odp_cpu_to_le_16;
+	odp_cpu_to_le_32;
+	odp_cpu_to_le_64;
+	odp_crypto_auth_capability;
+	odp_crypto_capability;
+	odp_crypto_cipher_capability;
+	odp_crypto_compl_free;
+	odp_crypto_compl_from_event;
+	odp_crypto_compl_result;
+	odp_crypto_compl_to_event;
+	odp_crypto_compl_to_u64;
+	odp_crypto_op;
+	odp_crypto_op_enq;
+	odp_crypto_operation;
+	odp_crypto_packet_from_event;
+	odp_crypto_packet_to_event;
+	odp_crypto_result;
+	odp_crypto_session_create;
+	odp_crypto_session_destroy;
+	odp_crypto_session_param_init;
+	odp_crypto_session_to_u64;
+	odp_errno;
+	odp_errno_print;
+	odp_errno_str;
+	odp_errno_zero;
+	odp_event_filter_packet;
+	odp_event_free;
+	odp_event_free_multi;
+	odp_event_free_sp;
+	odp_event_subtype;
+	odp_event_to_u64;
+	odp_event_type;
+	odp_event_type_multi;
+	odp_event_types;
+	odp_hash_crc32c;
+	odp_init_global;
+	odp_init_local;
+	odp_init_param_init;
+	odp_ipsec_auth_capability;
+	odp_ipsec_capability;
+	odp_ipsec_cipher_capability;
+	odp_ipsec_config;
+	odp_ipsec_config_init;
+	odp_ipsec_in;
+	odp_ipsec_in_enq;
+	odp_ipsec_out;
+	odp_ipsec_out_enq;
+	odp_ipsec_out_inline;
+	odp_ipsec_packet_from_event;
+	odp_ipsec_packet_to_event;
+	odp_ipsec_result;
+	odp_ipsec_sa_context;
+	odp_ipsec_sa_create;
+	odp_ipsec_sa_destroy;
+	odp_ipsec_sa_disable;
+	odp_ipsec_sa_mtu_update;
+	odp_ipsec_sa_param_init;
+	odp_ipsec_sa_to_u64;
+	odp_ipsec_status;
+	odp_le_to_cpu_16;
+	odp_le_to_cpu_32;
+	odp_le_to_cpu_64;
+	odp_mb_acquire;
+	odp_mb_full;
+	odp_mb_release;
+	odp_memcmp;
+	odp_memcpy;
+	odp_memset;
+	odp_override_abort;
+	odp_override_log;
+	odp_packet_add_data;
+	odp_packet_align;
+	odp_packet_alloc;
+	odp_packet_alloc_multi;
+	odp_packet_buf_len;
+	odp_packet_color;
+	odp_packet_color_set;
+	odp_packet_concat;
+	odp_packet_copy;
+	odp_packet_copy_data;
+	odp_packet_copy_from_mem;
+	odp_packet_copy_from_pkt;
+	odp_packet_copy_part;
+	odp_packet_copy_to_mem;
+	odp_packet_data;
+	odp_packet_drop_eligible;
+	odp_packet_drop_eligible_set;
+	odp_packet_extend_head;
+	odp_packet_extend_tail;
+	odp_packet_first_seg;
+	odp_packet_flow_hash;
+	odp_packet_flow_hash_set;
+	odp_packet_free;
+	odp_packet_free_multi;
+	odp_packet_free_sp;
+	odp_packet_from_event;
+	odp_packet_from_event_multi;
+	odp_packet_has_arp;
+	odp_packet_has_arp_set;
+	odp_packet_has_error;
+	odp_packet_has_eth;
+	odp_packet_has_eth_bcast;
+	odp_packet_has_eth_bcast_set;
+	odp_packet_has_eth_mcast;
+	odp_packet_has_eth_mcast_set;
+	odp_packet_has_eth_set;
+	odp_packet_has_flow_hash;
+	odp_packet_has_flow_hash_clr;
+	odp_packet_has_icmp;
+	odp_packet_has_icmp_set;
+	odp_packet_has_ip_bcast;
+	odp_packet_has_ip_bcast_set;
+	odp_packet_has_ipfrag;
+	odp_packet_has_ipfrag_set;
+	odp_packet_has_ip_mcast;
+	odp_packet_has_ip_mcast_set;
+	odp_packet_has_ipopt;
+	odp_packet_has_ipopt_set;
+	odp_packet_has_ipsec;
+	odp_packet_has_ipsec_set;
+	odp_packet_has_ipv4;
+	odp_packet_has_ipv4_set;
+	odp_packet_has_ipv6;
+	odp_packet_has_ipv6_set;
+	odp_packet_has_jumbo;
+	odp_packet_has_jumbo_set;
+	odp_packet_has_l2;
+	odp_packet_has_l2_error;
+	odp_packet_has_l2_set;
+	odp_packet_has_l3;
+	odp_packet_has_l3_error;
+	odp_packet_has_l3_set;
+	odp_packet_has_l4;
+	odp_packet_has_l4_error;
+	odp_packet_has_l4_set;
+	odp_packet_has_ref;
+	odp_packet_has_sctp;
+	odp_packet_has_sctp_set;
+	odp_packet_has_tcp;
+	odp_packet_has_tcp_set;
+	odp_packet_has_ts;
+	odp_packet_has_ts_clr;
+	odp_packet_has_udp;
+	odp_packet_has_udp_set;
+	odp_packet_has_vlan;
+	odp_packet_has_vlan_qinq;
+	odp_packet_has_vlan_qinq_set;
+	odp_packet_has_vlan_set;
+	odp_packet_head;
+	odp_packet_headroom;
+	odp_packet_input;
+	odp_packet_input_index;
+	odp_packet_is_segmented;
+	odp_packet_is_valid;
+	odp_packet_l2_offset;
+	odp_packet_l2_offset_set;
+	odp_packet_l2_ptr;
+	odp_packet_l3_chksum_insert;
+	odp_packet_l3_chksum_status;
+	odp_packet_l3_offset;
+	odp_packet_l3_offset_set;
+	odp_packet_l3_ptr;
+	odp_packet_l4_chksum_insert;
+	odp_packet_l4_chksum_status;
+	odp_packet_l4_offset;
+	odp_packet_l4_offset_set;
+	odp_packet_l4_ptr;
+	odp_packet_last_seg;
+	odp_packet_len;
+	odp_packet_move_data;
+	odp_packet_next_seg;
+	odp_packet_num_segs;
+	odp_packet_offset;
+	odp_packet_ones_comp;
+	odp_packet_parse;
+	odp_packet_parse_multi;
+	odp_packet_pool;
+	odp_packet_prefetch;
+	odp_packet_print;
+	odp_packet_print_data;
+	odp_packet_pull_head;
+	odp_packet_pull_tail;
+	odp_packet_push_head;
+	odp_packet_push_tail;
+	odp_packet_ref;
+	odp_packet_ref_pkt;
+	odp_packet_ref_static;
+	odp_packet_rem_data;
+	odp_packet_reset;
+	odp_packet_seg_data;
+	odp_packet_seg_data_len;
+	odp_packet_seg_len;
+	odp_packet_seg_to_u64;
+	odp_packet_shaper_len_adjust;
+	odp_packet_shaper_len_adjust_set;
+	odp_packet_split;
+	odp_packet_tail;
+	odp_packet_tailroom;
+	odp_packet_to_event;
+	odp_packet_to_event_multi;
+	odp_packet_to_u64;
+	odp_packet_trunc_head;
+	odp_packet_trunc_tail;
+	odp_packet_ts;
+	odp_packet_ts_set;
+	odp_packet_user_area;
+	odp_packet_user_area_size;
+	odp_packet_user_ptr;
+	odp_packet_user_ptr_set;
+	odp_pktin_event_queue;
+	odp_pktin_maxlen;
+	odp_pktin_queue;
+	odp_pktin_queue_config;
+	odp_pktin_queue_param_init;
+	odp_pktin_recv;
+	odp_pktin_recv_mq_tmo;
+	odp_pktin_recv_tmo;
+	odp_pktin_ts_from_ns;
+	odp_pktin_ts_res;
+	odp_pktin_wait_time;
+	odp_pktio_capability;
+	odp_pktio_close;
+	odp_pktio_config;
+	odp_pktio_config_init;
+	odp_pktio_default_cos_set;
+	odp_pktio_error_cos_set;
+	odp_pktio_headroom_set;
+	odp_pktio_index;
+	odp_pktio_info;
+	odp_pktio_link_status;
+	odp_pktio_lookup;
+	odp_pktio_mac_addr;
+	odp_pktio_mac_addr_set;
+	odp_pktio_max_index;
+	odp_pktio_open;
+	odp_pktio_param_init;
+	odp_pktio_print;
+	odp_pktio_promisc_mode;
+	odp_pktio_promisc_mode_set;
+	odp_pktio_skip_set;
+	odp_pktio_start;
+	odp_pktio_stats;
+	odp_pktio_stats_reset;
+	odp_pktio_stop;
+	odp_pktio_to_u64;
+	odp_pktout_event_queue;
+	odp_pktout_maxlen;
+	odp_pktout_queue;
+	odp_pktout_queue_config;
+	odp_pktout_queue_param_init;
+	odp_pktout_send;
+	odp_pmr_to_u64;
+	odp_pool_capability;
+	odp_pool_create;
+	odp_pool_destroy;
+	odp_pool_info;
+	odp_pool_lookup;
+	odp_pool_param_init;
+	odp_pool_print;
+	odp_pool_to_u64;
+	odp_queue_capability;
+	odp_queue_context;
+	odp_queue_context_set;
+	odp_queue_create;
+	odp_queue_deq;
+	odp_queue_deq_multi;
+	odp_queue_destroy;
+	odp_queue_enq;
+	odp_queue_enq_multi;
+	odp_queue_info;
+	odp_queue_lock_count;
+	odp_queue_lookup;
+	odp_queue_param_init;
+	odp_queue_sched_group;
+	odp_queue_sched_prio;
+	odp_queue_sched_type;
+	odp_queue_to_u64;
+	odp_queue_type;
+	odp_random_data;
+	odp_random_max_kind;
+	odp_random_test_data;
+	odp_rwlock_init;
+	odp_rwlock_read_lock;
+	odp_rwlock_read_trylock;
+	odp_rwlock_read_unlock;
+	odp_rwlock_recursive_init;
+	odp_rwlock_recursive_read_lock;
+	odp_rwlock_recursive_read_trylock;
+	odp_rwlock_recursive_read_unlock;
+	odp_rwlock_recursive_write_lock;
+	odp_rwlock_recursive_write_trylock;
+	odp_rwlock_recursive_write_unlock;
+	odp_rwlock_write_lock;
+	odp_rwlock_write_trylock;
+	odp_rwlock_write_unlock;
+	odp_schedule;
+	odp_schedule_group_create;
+	odp_schedule_group_destroy;
+	odp_schedule_group_info;
+	odp_schedule_group_join;
+	odp_schedule_group_leave;
+	odp_schedule_group_lookup;
+	odp_schedule_group_thrmask;
+	odp_schedule_multi;
+	odp_schedule_num_prio;
+	odp_schedule_order_lock;
+	odp_schedule_order_unlock;
+	odp_schedule_order_unlock_lock;
+	odp_schedule_pause;
+	odp_schedule_prefetch;
+	odp_schedule_release_atomic;
+	odp_schedule_release_ordered;
+	odp_schedule_resume;
+	odp_schedule_wait_time;
+	odp_shm_addr;
+	odp_shm_capability;
+	odp_shm_free;
+	odp_shm_import;
+	odp_shm_info;
+	odp_shm_lookup;
+	odp_shm_print;
+	odp_shm_print_all;
+	odp_shm_reserve;
+	odp_shm_to_u64;
+	odp_spinlock_init;
+	odp_spinlock_is_locked;
+	odp_spinlock_lock;
+	odp_spinlock_recursive_init;
+	odp_spinlock_recursive_is_locked;
+	odp_spinlock_recursive_lock;
+	odp_spinlock_recursive_trylock;
+	odp_spinlock_recursive_unlock;
+	odp_spinlock_trylock;
+	odp_spinlock_unlock;
+	odp_sys_cache_line_size;
+	odp_sys_huge_page_size;
+	odp_sys_huge_page_size_all;
+	odp_sys_info_print;
+	odp_sys_page_size;
+	odp_term_global;
+	odp_term_local;
+	odp_thread_count;
+	odp_thread_count_max;
+	odp_thread_id;
+	odp_thread_type;
+	odp_thrmask_and;
+	odp_thrmask_clr;
+	odp_thrmask_control;
+	odp_thrmask_copy;
+	odp_thrmask_count;
+	odp_thrmask_equal;
+	odp_thrmask_first;
+	odp_thrmask_from_str;
+	odp_thrmask_isset;
+	odp_thrmask_last;
+	odp_thrmask_next;
+	odp_thrmask_or;
+	odp_thrmask_set;
+	odp_thrmask_setall;
+	odp_thrmask_to_str;
+	odp_thrmask_worker;
+	odp_thrmask_xor;
+	odp_thrmask_zero;
+	odp_ticketlock_init;
+	odp_ticketlock_is_locked;
+	odp_ticketlock_lock;
+	odp_ticketlock_trylock;
+	odp_ticketlock_unlock;
+	odp_time_cmp;
+	odp_time_diff;
+	odp_time_diff_ns;
+	odp_time_global;
+	odp_time_global_from_ns;
+	odp_time_global_res;
+	odp_time_local;
+	odp_time_local_from_ns;
+	odp_time_local_res;
+	odp_timeout_alloc;
+	odp_timeout_free;
+	odp_timeout_fresh;
+	odp_timeout_from_event;
+	odp_timeout_tick;
+	odp_timeout_timer;
+	odp_timeout_to_event;
+	odp_timeout_to_u64;
+	odp_timeout_user_ptr;
+	odp_timer_alloc;
+	odp_timer_cancel;
+	odp_timer_capability;
+	odp_timer_current_tick;
+	odp_timer_free;
+	odp_timer_ns_to_tick;
+	odp_timer_pool_create;
+	odp_timer_pool_destroy;
+	odp_timer_pool_info;
+	odp_timer_pool_start;
+	odp_timer_pool_to_u64;
+	odp_timer_set_abs;
+	odp_timer_set_rel;
+	odp_timer_tick_to_ns;
+	odp_timer_to_u64;
+	odp_time_sum;
+	odp_time_to_ns;
+	odp_time_wait_ns;
+	odp_time_wait_until;
+	odp_tm_capabilities;
+	odp_tm_capability;
+	odp_tm_create;
+	odp_tm_destroy;
+	odp_tm_drop_prec_marking;
+	odp_tm_ecn_marking;
+	odp_tm_egress_init;
+	odp_tm_enq;
+	odp_tm_enq_with_cnt;
+	odp_tm_find;
+	odp_tm_is_idle;
+	odp_tm_node_connect;
+	odp_tm_node_context;
+	odp_tm_node_context_set;
+	odp_tm_node_create;
+	odp_tm_node_destroy;
+	odp_tm_node_disconnect;
+	odp_tm_node_fanin_info;
+	odp_tm_node_info;
+	odp_tm_node_lookup;
+	odp_tm_node_params_init;
+	odp_tm_node_sched_config;
+	odp_tm_node_shaper_config;
+	odp_tm_node_threshold_config;
+	odp_tm_node_wred_config;
+	odp_tm_priority_query;
+	odp_tm_priority_threshold_config;
+	odp_tm_queue_connect;
+	odp_tm_queue_context;
+	odp_tm_queue_context_set;
+	odp_tm_queue_create;
+	odp_tm_queue_destroy;
+	odp_tm_queue_disconnect;
+	odp_tm_queue_info;
+	odp_tm_queue_params_init;
+	odp_tm_queue_query;
+	odp_tm_queue_sched_config;
+	odp_tm_queue_shaper_config;
+	odp_tm_queue_threshold_config;
+	odp_tm_queue_wred_config;
+	odp_tm_requirements_init;
+	odp_tm_sched_create;
+	odp_tm_sched_destroy;
+	odp_tm_sched_lookup;
+	odp_tm_sched_params_init;
+	odp_tm_sched_params_read;
+	odp_tm_sched_params_update;
+	odp_tm_shaper_create;
+	odp_tm_shaper_destroy;
+	odp_tm_shaper_lookup;
+	odp_tm_shaper_params_init;
+	odp_tm_shaper_params_read;
+	odp_tm_shaper_params_update;
+	odp_tm_stats_print;
+	odp_tm_threshold_create;
+	odp_tm_threshold_destroy;
+	odp_tm_threshold_params_init;
+	odp_tm_thresholds_lookup;
+	odp_tm_thresholds_params_read;
+	odp_tm_thresholds_params_update;
+	odp_tm_total_query;
+	odp_tm_total_threshold_config;
+	odp_tm_vlan_marking;
+	odp_tm_wred_create;
+	odp_tm_wred_destroy;
+	odp_tm_wred_lookup;
+	odp_tm_wred_params_init;
+	odp_tm_wred_params_read;
+	odp_tm_wred_params_update;
+	odp_version_api_str;
+	odp_version_impl_name;
+	odp_version_impl_str;
+
+local:
+	*;
+
+	_odp_*;
+};
