Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

makefile #151

Open
xutopia77 opened this issue Jun 25, 2021 · 10 comments
Open

makefile #151

xutopia77 opened this issue Jun 25, 2021 · 10 comments

Comments

@xutopia77
Copy link
Contributor

1,是不是可以把Makefile编译脚本整理一下?现在编译打印比较乱,重要信息全部淹没了,而且在linux下编译有很多警告,虽然暂时不影响功能,个人改了一下Makefile脚本,效果如下
CC mov-mvhd.o
...........
CC mov-tfdt.o
AR libmov.a
make ok, output: debug.linux/libmov.a
2,作者是不是在win下开发比较多?,下载了几次,linux下编译不通过,还需要改一下

@ireader
Copy link
Owner

ireader commented Jun 27, 2021

感谢,方便的话把你的Makefile提个MR?

@xutopia77
Copy link
Contributor Author

已在sdk项目中提交,pr通过后,会在media_server,3rd,avcodec中一并提交修改

@ireader
Copy link
Owner

ireader commented Jun 30, 2021

已合入, 非常感谢!

@kbore
Copy link

kbore commented Jul 1, 2021

我也有些关于Makefile的意见, 请问是在这个 issue 合并讨论还是另开 issue.

  • 编译出的动态库后缀不对(仍然是.a).
  • -fvisibility=hidden 建议暂时关闭, 除非已动态 export 所有对外接口. 静态库使用该参数似乎没啥意义.
  • 缺少 make install 功能(不方便cmake工程导入).
  • 缺少 soname(对工程导入cmake有一些影响).
  • librtsp/source/server/aio 代码没有进入rtsp库编译.
  • 增加strip符号表功能

除了第2点fvisibility=hidden的问题, 我不知道作者要export哪些接口, 只是临时关闭了该功能. 其他修改已有补丁. 请问是否需要提个 PR 给你?

@ireader
Copy link
Owner

ireader commented Jul 1, 2021

欢迎提PR!

其它一些问题:

编译出的动态库后缀不对(仍然是.a).

目前都是已静态库方式提供,哪个项目需要编译动态库?

-fvisibility=hidden 建议暂时关闭, 除非已动态 export 所有对外接口. 静态库使用该参数似乎没啥意义.

-fvisibility=hidden 用于动态库,默认情况下不导出任何函数,除非头文件中定义了visible或者定义map文件。

librtsp/source/server/aio 代码没有进入rtsp库编译.

协议代码默认都不包含网络处理部分, aio代码在test中编译,这是特意设计的。

@kbore
Copy link

kbore commented Jul 1, 2021

目前都是已静态库方式提供,哪个项目需要编译动态库?

我个人嵌入式项目想集成作者的媒体库, 习惯性会使用动态库.

-fvisibility=hidden 用于动态库,默认情况下不导出任何函数,除非头文件中定义了visible或者定义map文件。

是的, 我看头文件中也没有设置接口的可见性, 直接编译动态库出来应该没办法使用. 我个人也喜欢默认隐藏所有符号, 手动导出对外API. 因此是否先屏蔽该编译参数, 在所有接口显示设置可见性后才放开该参数. 目前我仅看了mpeg库, 感觉只有mpeg-ts.h和mpeg-ps.h和若干宏是需要导出的, 其他include文件夹下的文件(API)感觉属于内部API.

协议代码默认都不包含网络处理部分, aio代码在test中编译,这是特意设计的。

了解.

@ireader
Copy link
Owner

ireader commented Jul 2, 2021

我个人嵌入式项目想集成作者的媒体库, 习惯性会使用动态库.

对嵌入式不太了解,如果需要编译动态库,可以参考sdk/libaio的makefile文件, 在这个项目中,使用map文件导出需要的函数。

include $(ROOT)/gcc.mk

CFLAGS += -fvisibility=default
LDFLAGS += -Wl,--version-script=libaio.map

如上,在include gcc.mk文件后,可以修改visibility为default

@ireader
Copy link
Owner

ireader commented Jul 2, 2021

缺少 make install 功能(不方便cmake工程导入).

想支持cmake编译,但是一直拖延至今,欢迎提交cmake编译脚本。

@kbore
Copy link

kbore commented Jul 2, 2021

我个人嵌入式项目想集成作者的媒体库, 习惯性会使用动态库.

对嵌入式不太了解,如果需要编译动态库,可以参考sdk/libaio的makefile文件, 在这个项目中,使用map文件导出需要的函数。

include $(ROOT)/gcc.mk

CFLAGS += -fvisibility=default
LDFLAGS += -Wl,--version-script=libaio.map

如上,在include gcc.mk文件后,可以修改visibility为default

怎么让符号可见, 这个我也略有研究过. 因此想跟您讨论下控制符号导出的方式.

  • 一种是像您给的建议, 使用 map 文件控制导出.
  • 另一种是在源码头文件中控制导出. 个人项目是封装了如下的宏.
    我个人更倾向于使用这种, 在头文件里明确哪些符号是需要导出的. map 文件方式指定整个库是比较方便的, 但是精确到函数写起来就不太友好了, 还不如将其分散到各个库的头文件中. 但是这种做法对现有工程改动量较大, 我个人对mpeg库之外的代码也不是很熟悉, 没办法直接提交有效的补丁. 最偷懒的情况是直接给所有include文件夹下的接口加上导出宏, 但是这样就失去精确控制的意义了.
#if defined _WIN32 || defined __CYGWIN__
  #ifdef BUILDING_DLL
    #ifdef __GNUC__
      #define DLL_PUBLIC __attribute__ ((dllexport))
    #else
      #define DLL_PUBLIC __declspec(dllexport) // Note: actually gcc seems to also supports this syntax.
    #endif
  #else
    #ifdef __GNUC__
      #define DLL_PUBLIC __attribute__ ((dllimport))
    #else
      #define DLL_PUBLIC __declspec(dllimport) // Note: actually gcc seems to also supports this syntax.
    #endif
  #endif
  #define DLL_LOCAL
#else
  #if __GNUC__ >= 4
    #define DLL_PUBLIC __attribute__ ((visibility ("default")))
    #define DLL_LOCAL  __attribute__ ((visibility ("hidden")))
  #else
    #define DLL_PUBLIC
    #define DLL_LOCAL
  #endif
#endif

@kbore
Copy link

kbore commented Jul 2, 2021

缺少 make install 功能(不方便cmake工程导入).

想支持cmake编译,但是一直拖延至今,欢迎提交cmake编译脚本。

好的, 那我周末弄下. 过程中会有些细节问题想跟您实时交流, 方便留个联系方式吗.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants