OSX dynamic linking 一些转载以及自己的方法

Note:some of these are copied from other website,for learning purpose

Dynamic linking on Mac OS X, a tiny example
Steps:
1) create a library libmylib.dylib containing mymod.o
2) compile and link a "callmymod" which calls it
3) call mymod from callmymod, using DYLD_LIBRARY_PATH and DYLD_PRINT_LIBRARIES
Problem: you "just" want to create a library for other modules to use. However there‘s a daunting pile of programs -- gcc, ld, macosx libtool, dyld -- with zillions of options, some well-rotted compost, and differences between MacOSX and Linux. There are tons of man pages (I count 7679 + 1358 + 228 + 226 lines in 10.4.11 ppc) but not much in the way of examples, or programs with a "tell me what you‘re doing" mode.
(The most important thing in understanding is to make a simplified OVERVIEW for yourself: draw some pictures, run some small examples, explain it to someone else).
Background: apple OverviewOfDynamicLibraries, Wikipedia Dynamic_library

Step 1, create libmylib.dylib --
mymod.c:
#include <stdio.h>
void mymod( int x )
{
printf( "mymod: %d\n", x );
}
gcc -c mymod.c # -> mymod.o
gcc -dynamiclib -current_version 1.0 mymod.o -o libmylib.dylib
# calls libtool with many options -- see man libtool
# -compatibility_version is used by dyld, see also cmpdylib

file libmylib.dylib # Mach-O dynamically linked shared library ppc
otool -L libmylib.dylib # versions, refs /usr/lib/libgcc_s.1.dylib

Step 2, compile and link callmymod --
callmymod.c:
extern void mymod( int x );
int main( int argc, char** argv )
{
mymod( 42 );
}
gcc -c callmymod.c
gcc -v callmymod.o ./libmylib.dylib -o callmymod
# == gcc callmymod.o -dynamic -L. -lmylib
otool -L callmymod # refs libmylib.dylib
nm -gpv callmymod # U undef _mymod: just a reference, not mymod itself

Step 3, run callmymod linking to libmylib.dylib --
export DYLD_PRINT_LIBRARIES=1 # see what dyld does, for ALL programs
callmymod
dyld: loaded: libmylib.dylib ...
mymod: 42

mv libmylib.dylib /tmp
export DYLD_LIBRARY_PATH=/tmp # dir:dir:...
callmymod
dyld: loaded: /tmp/libmylib.dylib ...
mymod: 42

unset DYLD_PRINT_LIBRARIES
unset DYLD_LIBRARY_PATH
That ends one tiny example; hope it helps understand the steps.
(If you do this a lot, see GNU Libtool which is glibtool on macs, and SCons.)
cheers
-- denis

------------------

my way

因为我喜欢用xcode,所以

1.新建xcode framework 工程。

2.利用framework将代码编译成dylib。

3.在新的有main程序入口的另外程序中设置工程属性。

4.拖动dylib到新的main入口的工程里面。

时间: 2024-10-05 05:38:22

OSX dynamic linking 一些转载以及自己的方法的相关文章

转载:onCreate()方法中的参数Bundle savedInstanceState 的意义用法

Activity中有一个名称叫onCreate的方法.该方法是在Activity创建时被系统调用,是一个Activity生命周期的开始.可是有一点容易被忽视,就是onCreate方法的参数saveInsanceState.一般的程序开发中,很少用到这个参数.       onCreate方法的完整定义如下:      public void onCreate(Bundle saveInsanceState){                super.onCreate(saveInsanceSt

mac osx wine 1.7.5 源码编译方法及中文乱码的解决

源码编译 1.先安装apple-gcc42,Mac osx自带的 llvm-gcc,编译后,无法运行wine. 1 sudo port install apple-gcc42 2.下载wine源码 1 2 git clone git://source.winehq.org/git/wine.git ~/wine-git cd ~/wine-git 3.安装 X11/XQuartz ,官网下载 XQuartz 4.我是用的是1.7.5编译的 1 git checkout -b 1.7.5 wine

【转载】关于对方法实例化的相关感悟以及unity的50个技巧

关于实例化问题的感悟(笔者自悟,大神勿喷) 在之前的程序编写过程中,虽然对相关的方法进行了实例化,但是在运行的时候总是会出现"未将对象引用设置到对象的实例",出现该种问题的原因是由于在实例化后,没有对实例化进行引用赋值,所以导致相关变量无法在其他方法中进行读取,以后需对此谨记. 同时之前浏览过一片大神写过的关于unity相关技巧的文章,笔者觉得受益匪浅,现将链接与原文转载于下,希望可以帮助大家. 使用Unity3D的50个技巧:Unity3D最佳实践 作者:房燕良 关于这些技巧 这些技

5、转载 bwa的使用方法

http://bio-bwa.sourceforge.net/bwa.shtml http://www.plob.org/?p=25 bwa的使用需要两中输入文件: Reference genome data(fasta格式 .fa, .fasta, .fna) Short reads data (fastaq格式 .fastaq, .fq) step 1: 建立 Index根据reference genome data(e.g. reference.fa) 建立 Index File bwa

(转载)使用Links方法安装Eclipse插件

因为最近在搞前端的东西,需要在Eclipse下安装Spket插件,然而在线安装又连接不起,然后下了个离线的插件包,加到eclipse安装目录下的dropin目录下,怎么都导入不进去,真是尼玛的日了狗了,后来在网上百度了很多方法,都是坑.唯独这一篇博文解决了我的所有疑惑. http://blog.csdn.net/whucyl/article/details/5355492 卧槽,感动的眼泪都留下来了.其实我之前装插件的时候用到了这种方法,只是时间太久我给忘了,所以这就体现了随笔的重要性啊!所以赶

(转载)String.IsNullorEmpty()方法的使用

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls; namespace StringIsNull{    public partial class _Default : System.Web.UI.Page    {        protected void Page_Load(o

Dynamic find_by Methods 使用动态的find_by方法

class TaskController < ApplicationController def incomplete @tasks = Task.find(:all, :conditions => ['complete = ?', false]) end def last_incomplete @task = Task.find(:first, :conditions => ['complete =?', false], :order => 'created_at DESC')

[转载]Tortoise SVN使用方法,简易图解

刚到公司实习,为了版本控制,我公司使用SVN控制版本,在此记下SVN使用方法,仅供参考! 废话少说,上图! -------------------------------------------------------我是分割线-------------------------------------------------------------------------------------- 首先就是安装程序啦,这就不用讲解了吧! -----------------------------

[转载]OpenWrt增加软件包方法

http://blog.chinaunix.net/uid-10429687-id-3374873.html OpenWrt是一个比较完善的嵌入式Linux开发平台,在无线路由器应用上已有100多个软件包.人们可以在其基础上增加软件包,以扩大其应用范围.OpenWrt在增加软件方面使用极其方便,按照OpenWrt的约定就可以很简单完成. 加入的软件包可以是网上可下载的开源软件或自行开发的软件.為加入软件包需要在package目錄下创建一个目录,以包含软件包的各种信息和与OpenWrt建立联系的文