我想使用基于autoconf的构建系统将内部符号的符号隐藏添加到现有库中。探索-fvisibility=hidden__attribute__ ((visibility("default")))的本地编译器等效项的最佳方法是什么?

最佳答案

我不认为这是标准宏,但是您可以根据需要扩展此宏以支持其他编译器,例如Sun编译器的__hidden

AC_CACHE_CHECK([for __attribute__((visibility("hidden")))],
    ac_cv_hidden_visibility_attribute, [
    echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c
    ac_cv_hidden_visibility_attribute=no
    if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD);
    then
        if grep '\.hidden.*foo' conftest.s >/dev/null;
        then
            ac_cv_hidden_visibility_attribute=yes
        fi
    fi
    rm -f conftest.*
    ])
if test $ac_cv_hidden_visibility_attribute = yes;
then
    AC_DEFINE(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE, 1,
          [Define if __attribute__((visibility("hidden"))) is supported.])
fi


结果config.h

/* Define if __attribute__((visibility("hidden"))) is supported. */
#define HAVE_HIDDEN_VISIBILITY_ATTRIBUTE 1

关于c - 在autoconf中探查符号可见性扩展的最佳实践,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5987219/

10-13 06:19