Linux and Mac build issue
2008-07-17 14:31
295 查看
Linux and Mac build issues
孙文涛 2008-07-16
(1) Windows上面的lib和dll对应Linux下面的lib**.a 和lib**.so,而生成这个*.a和*.so的文件,即目标文件为*.o 和*.os
so 为Shared Object的简写。
今天我在做跨平台的build时碰到的问题就是用SCons的SharedLibrary的builder,可是在前面的编译阶段却产生的是*.o的文件,而真正需要的是*.os的文件。
在Mac上面StaticLibrary是*.a结尾,SharedLibrary 则是lib**.dylib结尾的。
(2) 今天对link和build的过程有了更新的认识:
compiler将*.cpp文件build为Object file, *.obj on Windows, *.o or *.os on POSIX platform;
link的工具会将这些object file link为一个lib或dll等。
今天早上很早就碰到了link unresolved symbol的问题,在一个project中应该是不会存在这样问题的,最后发现原来我用SCons的Glob的操作后,没有将所有子folder下面的东西都include进来所致。./win,./unix等下面的cpp没有生成*.obj文件。
(3) Typical preprocessor definitions:
以后可以参考这个去定义预处理宏
#if defined(OSWin_)
#ifdef OM_BUILD_DLL
// dll export.
#define OM_Export _declspec(dllexport)
#else
// dll import, the normal way to use the library.
#define OM_Export _declspec(dllimport)
#endif
#elif defined(OSMac_) || defined(OSLinux_)
#define OM_Export
#endif
孙文涛 2008-07-16
(1) Windows上面的lib和dll对应Linux下面的lib**.a 和lib**.so,而生成这个*.a和*.so的文件,即目标文件为*.o 和*.os
so 为Shared Object的简写。
今天我在做跨平台的build时碰到的问题就是用SCons的SharedLibrary的builder,可是在前面的编译阶段却产生的是*.o的文件,而真正需要的是*.os的文件。
在Mac上面StaticLibrary是*.a结尾,SharedLibrary 则是lib**.dylib结尾的。
(2) 今天对link和build的过程有了更新的认识:
compiler将*.cpp文件build为Object file, *.obj on Windows, *.o or *.os on POSIX platform;
link的工具会将这些object file link为一个lib或dll等。
今天早上很早就碰到了link unresolved symbol的问题,在一个project中应该是不会存在这样问题的,最后发现原来我用SCons的Glob的操作后,没有将所有子folder下面的东西都include进来所致。./win,./unix等下面的cpp没有生成*.obj文件。
(3) Typical preprocessor definitions:
以后可以参考这个去定义预处理宏
#if defined(OSWin_)
#ifdef OM_BUILD_DLL
// dll export.
#define OM_Export _declspec(dllexport)
#else
// dll import, the normal way to use the library.
#define OM_Export _declspec(dllimport)
#endif
#elif defined(OSMac_) || defined(OSLinux_)
#define OM_Export
#endif
相关文章推荐
- Issue 71 - pymssql - Undefined symbols on Mac, CentOS, Redhat with pre-compiled build - A fast MS SQL Server client library for Python directly using C API instead of ODBC. It is Python DB-API 2.0 compliant. Works on Linux, *BSD, Solaris, Mac OS X and Win
- linux and mac transfer data
- Build Your Own Oracle RAC 10g Release 2 Cluster on Linux and FireWire
- HOWTO: Install, Build and Use openCV (MacOSX 10.10)
- How to build a Linux kernel and flash it to the phone
- Timer Class for both Unix/Linux/Mac and Windows system
- 本周技术关注[面向webapps运维]:Build Your Own Oracle RAC 10g Release 2 Cluster on Linux and FireWire
- Set up SSH for Git and Mercurial on Mac OSX/Linux
- How to build and run ARM Linux on QEMU from scratch
- Cross-Platform Development in C++: Building Mac OS X, Linux, and Windows Applications
- selinux mode DAC and MAC
- Build Your Own Oracle RAC Cluster on Oracle Enterprise Linux and iSCSI
- Build and Install cx_Oracle on Mac Leopard Intel
- Install MongoDB Community Edition Manually on mac and linux
- linux etc/issue and etc/motd
- 【转】Build Your Own Oracle RAC 11g Cluster on Oracle Linux and iSCSI
- Build Your Own Oracle RAC 10g Release 2 Cluster on Linux and FireWire
- HOWTO: Install, Build and Use openCV (MacOSX 10.10)
- AT&T ASSEMBLY FOR LINUX AND MAC (SYS_FORK)
- opencv_linux_install and build