Um conjunto diferente de bibliotecas dinâmicas pode ser carregado pelo IDE porque seu aplicativo herda um ambiente diferente que é usado pelo vinculador dinâmico para localizar as bibliotecas. Consulte página de manual do arquivo para ver as variáveis de ambiente que podem afetar o comportamento do linker dinâmico. Seu IDE deve ter opções para controlar isso.
Se você ainda quiser garantir que seu aplicativo seja executado a partir de um processo que não tenha seu IDE como ancestral, configure o IDE para executar um comando como este:
bash -c 'your_app &'
isto fará o bash rodar o seu_app em segundo plano e sair. Quando o processo pai (aqui: bash) sai, o filho (aqui: your_app) é adotado pelo processo init, significando que o init (PID = 1) se torna seu pai. Novamente, no entanto, isso não afetará as bibliotecas carregadas.
Você também pode executar um script de servidor que aguarda por um sinal (usando o comando trap) e executa seu aplicativo quando ele o recebe. Seu IDE deve então ser configurado para executar um comando kill para enviar o sinal para o servidor. Desta forma, você estará executando seu aplicativo no mesmo ambiente que o seu terminal. Esta é provavelmente uma solução de overkill.
Minha recomendação é tentar configurar o IDE para que as bibliotecas certas sejam usadas pelo processo filho.