freetype-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [ft-devel] [freetype-2.9.1] FT_Init_FreeType is missing with cc on S


From: Kiyoshi KANAZAWA
Subject: Re: [ft-devel] [freetype-2.9.1] FT_Init_FreeType is missing with cc on Solaris x64
Date: Thu, 3 May 2018 20:12:05 +0900 (JST)

Dear Suzuki san,

a) log files of configure & make are attached.

b) You are right.
% nm objs/ftinit.o|grep FT_Init_FreeType
[32]    |                 960|                 123|FUNC |GLOB |2    |2      |FT_Init_FreeType
% nm objs/.libs/ftinit.o|grep FT_Init_FreeType
[32]    |                 960|                 123|FUNC |GLOB |2    |2      |FT_Init_FreeType
% nm objs/.libs/libfreetype.so.6.16.1|grep FT_Init_FreeType
[533]   |              349760|                 123|FUNC |LOCL |2    |17     |FT_Init_FreeType
Regards,

--- Kiyoshi


----- Original Message -----
From: suzuki toshiya <address@hidden>
To: Kiyoshi KANAZAWA <address@hidden>
Cc: "address@hidden" <address@hidden>
Date: 2018/5/3, Thu 19:05
Subject: Re: [ft-devel] [freetype-2.9.1] FT_Init_FreeType is missing with cc on Solaris x64

Dear Kanazawa-san,

Kiyoshi KANAZAWA wrote:
> a)
> freetype-2.9.1 ... objs/.libs/libfreetype.so.6.16.1
> freetype-2.9  ... objs/.libs/libfreetype.so.6.16.0
> Is this what you need ?

No, libfreetype.so.x.y.z is the resulted shared library, not the file to control
the symbols.
ahhh, my request was how ftexport.sym was processed during the linking.
In the case of gcc + GNU ld, ftexport.sym is converted to GNU ld script,
libfreetype.ver (conversion is done by GNU libtool).
Could you post the (xz-compressed) log of whole commands executed in the building?

> b)
> It may be caused in cc phase, but not in ld.
> I once experienced the similar problem with "cc -fvisibility=hidden" on Oracle cc.
>
> For example, generating ftsystem.o
> freetype-2.9.1:
> libtool: compile:  cc -m64 -I/tmp/freetype-2.9.1/objs -I./builds/unix -I/tmp/freetype-2.9.1/include -c -g -fvisibility=hidden -I/usr/include/libpng14 "-DFT_CONFIG_CONFIG_H=<ftconfig.h>" -DFT2_BUILD_LIBRARY "-DFT_CONFIG_MODULES_H=<ftmodule.h>" "-DFT_CONFIG_OPTIONS_H=<ftoption.h>" builds/unix/ftsystem.c  -KPIC -DPIC -o /tmp/freetype-2.9.1/objs/.libs/ftsystem.o
>
> freetype-2.9:
> libtool: compile:  cc -m64 -I/tmp/freetype-2.9/objs -I./builds/unix -I/tmp/freetype-2.9/include -c -g -I/usr/include/libpng14 "-DFT_CONFIG_CONFIG_H=<ftconfig.h>" -DFT2_BUILD_LIBRARY "-DFT_CONFIG_MODULES_H=<ftmodule.h>" "-DFT_CONFIG_OPTIONS_H=<ftoption.h>" builds/unix/ftsystem.c  -KPIC -DPIC -o /tmp/freetype-2.9/objs/.libs/ftsystem.o

Basically, FreeType source inserts "__attribute__(( visibility("default") ))".
By this, although gcc compiles the objects with "-fvisibility=hidden", but the
public symbols are exported, like this.

...
000000000000e022 t ft_trig_downscale
000000000000e073 t ft_trig_prenorm
000000000000e153 t ft_trig_pseudo_rotate
000000000000e2cf t ft_trig_pseudo_polarize
000000000000048e T FT_MulDiv
000000000000010f T FT_Get_Advance
0000000000000215 T FT_Get_Advances
0000000000003212 T FT_Load_Glyph
...

Please post the result of "nm" command for an object file. If no global symbols
are found in it, maybe the effect of -fvisibility option might be different
between GCC and Oracle CC. If so, it would be reasonable to introduce the
exceptional handling for Oracle CC. But still I'm wondering whether it is in
compiling phase issue or linking phase issue.

> Tried to remove "-fvisibility=hidden", but failed with the following patch.
> "-fvisibility=hidden" is still specified.
> Where should I change to test it ?

Do you want to use cmake in FreeType2? I don't recommend, it does not support
GNU libtool, so the platform-independent control for symbol exposure would be
poor. Also current cmake is contributed by the users, maybe tested on only 1 or
2 dominant platforms, I'm afraid nobody tested in on Solaris with Oracle
toolchain (and the contributors have no access to Solaris). Ah, looking at the
commands in above, you seem to be using autoconf. Thanks in advance!

> === From here, patch I tried ===
> diff -ur ../freetype-2.9.1.orig/CMakeLists.txt ./CMakeLists.txt
> --- ../freetype-2.9.1.orig/CMakeLists.txt      2018-05-01 19:45:45.000000000 +0000
> +++ ./CMakeLists.txt    2018-05-03 17:28:12.766516654 +0000
> @@ -337,7 +337,7 @@
>
>  set_target_properties(
>    freetype PROPERTIES
> -    C_VISIBILITY_PRESET hidden)
> +    C_VISIBILITY_PRESET default)
>
>  target_compile_definitions(
>    freetype PRIVATE FT2_BUILD_LIBRARY)

Hmm.

> diff -ur ../freetype-2.9.1.orig/builds/unix/configure ./builds/unix/configure
> --- ../freetype-2.9.1.orig/builds/unix/configure        2018-05-02 06:34:47.000000000 +0000
> +++ ./builds/unix/configure    2018-05-03 17:27:54.382195684 +0000
> @@ -13416,7 +13416,9 @@
>  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fvisibility=hidden compiler flag" >&5
>  $as_echo_n "checking for -fvisibility=hidden compiler flag... " >&6; }
>  orig_CFLAGS="${CFLAGS}"
> +#ifndef __SUNPRO_C
>  CFLAGS="${CFLAGS} -fvisibility=hidden"
> +#endif
>  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
>  /* end confdefs.h.  */
> diff -ur ../freetype-2.9.1.orig/builds/unix/configure.ac ./builds/unix/configure.ac
> --- ../freetype-2.9.1.orig/builds/unix/configure.ac    2018-05-02 06:34:44.000000000 +0000
> +++ ./builds/unix/configure.ac  2018-05-03 17:27:54.382907980 +0000
> @@ -313,7 +313,9 @@
>  #
>  AC_MSG_CHECKING([for -fvisibility=hidden compiler flag])
>  orig_CFLAGS="${CFLAGS}"
> +#ifndef __SUNPRO_C
>  CFLAGS="${CFLAGS} -fvisibility=hidden"
> +#endif
>  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
>                    AC_MSG_RESULT(yes),
>                    CFLAGS="${orig_CFLAGS}"
> diff -ur ../freetype-2.9.1.orig/builds/unix/configure.raw ./builds/unix/configure.raw
> --- ../freetype-2.9.1.orig/builds/unix/configure.raw    2018-05-01 19:35:09.000000000 +0000
> +++ ./builds/unix/configure.raw 2018-05-03 17:27:54.383361566 +0000
> @@ -313,7 +313,9 @@
>  #
>  AC_MSG_CHECKING([for -fvisibility=hidden compiler flag])
>  orig_CFLAGS="${CFLAGS}"
> +#ifndef __SUNPRO_C
>  CFLAGS="${CFLAGS} -fvisibility=hidden"
> +#endif
>  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
>                    AC_MSG_RESULT(yes),
>                    CFLAGS="${orig_CFLAGS}"

Excuse me, these changes for autotools look quite different from the syntax of
autoconf, it looks like C preprocessor. Have you ever resolved similar problem
by such patch for autoconf files?



Attachment: configure.log.xz
Description: Binary data

Attachment: make.log.xz
Description: Binary data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]