亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪(fǎng)問(wèn)板塊 發(fā)新帖
查看: 13843 | 回復(fù): 10
打印 上一主題 下一主題

[C++] 關(guān)于 使用automake生成共享動(dòng)態(tài)庫(kù)(.so) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-06-07 16:21 |只看該作者 |倒序?yàn)g覽
本帖最后由 olivia2007 于 2010-06-07 17:02 編輯

如何使用automake生成共享動(dòng)態(tài)庫(kù)(.so)


在網(wǎng)上看的automake生成動(dòng)態(tài)庫(kù)大都是(.la),好不容易找到了一個(gè)生成共享動(dòng)態(tài)庫(kù)的(.so)
如:
用automake編譯共享庫(kù)有多種方法,automake本身提供了對(duì)編譯共享庫(kù)支持,當(dāng)然我們也可以不使用它的這個(gè)功能,下面分別介紹這兩種方法:

一、不使用automake編譯共享庫(kù)功能
configure.ac和Makefile.am的配置和可執(zhí)行文件基本相同,僅僅Makefile.am中的變量名有些區(qū)別,另外需要再加上“-fPIC -shared”鏈接選項(xiàng),
如可以將“bin_”改成其它名字,如“module_”,這樣就變成了:
LDFLAGS=-fPIC -shared
moduledir=$(prefix)/lib # 請(qǐng)注意由于module不是automake標(biāo)準(zhǔn)的名稱(chēng),所以需要自己加上安裝目前
module_PROGRAMS = libfoo.so
libfoo_so_SOURCES = foo.c foo.h

二、使用automake編譯共享庫(kù)功能
automake提供的編譯共享庫(kù)功能比較完善,支持同時(shí)編譯出靜態(tài)和共享兩個(gè),及帶版號(hào)的多個(gè)版本,方法如下:
1、需要在configure.ac或configure.in文件中增加如下一句:
AC_PROG_LIBTOOL

2、在運(yùn)行automake -a之前,需要執(zhí)行
libtoolize -f -c

3、Makefile.am的格式有點(diǎn)區(qū)別,如下:
lib_LTLIBRARIES = libfoo.la  # 注意不是libfoo.so
libfoo_la_SOURCES = foo.cpp foo.h


我需要生成.so動(dòng)態(tài)庫(kù),所以我選擇了第一種方法,編譯成功,也生成了.so文件和可執(zhí)行文件,
可是,生成的可執(zhí)行文件執(zhí)行不了,報(bào)段錯(cuò)誤。
通過(guò)core文件查看,也看不出錯(cuò)在哪。

Program terminated with signal 11, Segmentation fault.
#0  0x00000001 in ?? ()

請(qǐng)問(wèn)有誰(shuí)知道,這是為什么呢,或者有更好的用automake生成.so動(dòng)態(tài)庫(kù)的方法。謝謝!

論壇徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
2 [報(bào)告]
發(fā)表于 2010-06-08 09:17 |只看該作者
Makefile.am中加上一句:

libfoo_la_LDFLAGS = -module

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2010-06-08 09:33 |只看該作者
回復(fù) 2# EricFisher


    我生成的不是la庫(kù),是so庫(kù)。

論壇徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
4 [報(bào)告]
發(fā)表于 2010-06-08 09:36 |只看該作者
回復(fù) 3# olivia2007


    是的,但是加上這個(gè)選項(xiàng),就成了.so了。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2010-06-08 10:11 |只看該作者
1. 你可以看下configure && make后的編譯展開(kāi)的gcc完整編譯/鏈接命令行, 看下生成的是否有問(wèn)題。

2. .la文件就是一個(gè)文本,一般最終會(huì)生成.a 和.so兩個(gè)庫(kù),la里包含了.so的一些依賴(lài)以及靜態(tài)庫(kù)名稱(chēng)等。用此方式生成的.so也沒(méi)問(wèn)題啊。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2010-06-08 11:40 |只看該作者
回復(fù) 4# EricFisher

就比如這樣
LDFLAGS=-fPIC -shared
moduledir=$(prefix)/lib
module_PROGRAMS = libfoo.so
libfoo_so_SOURCES = foo.c foo.h
ibfoo_la_LDFLAGS = -module

這樣嗎?我試了,可是沒(méi)用。

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2010-06-08 12:21 |只看該作者
......你看下configure && make后的編譯展開(kāi)的gcc完整編譯/鏈接命令行, 看下是否有問(wèn)題。



假設(shè)庫(kù)源碼目錄有如下文件:
Makefile.am
src1.c src1.h
src2.c src2.h
myexpfunc.h
footest.c

/////////////////////////////////////////////////////////////
Makefile.am可以如下寫(xiě)法:

include_HEADERS=myexpfunc.h //最終調(diào)用者所使用的動(dòng)態(tài)庫(kù)函數(shù)聲明文件, 執(zhí)行make install會(huì)將其在prefix目錄下的include中

lib_LTLIBRARIES=libfoo.la
libfoo_la_LDFLAGS = -version-info  1:0:1 //可以指定下版本號(hào),這樣會(huì)生成libfoo.so.1.0.1 然后make install后會(huì)自動(dòng)創(chuàng)建符號(hào)鏈接libfoo.so->libfoo.so.1.0.1

libfoo_la_SOURCES=src1.c src2.c

libfoo_la_LIBADD= //本動(dòng)態(tài)庫(kù)的第三方依賴(lài)庫(kù), 比如openssl 可以寫(xiě)為: -L /my_openssl_lib -lcrypto, 如果不依賴(lài)可以不寫(xiě), 具體依賴(lài)目錄可以在configure.in中編寫(xiě)--with參數(shù)指定

INCLUDES= //本動(dòng)態(tài)庫(kù)的第三方依賴(lài)頭文件目錄, 比如openssl可以寫(xiě)為: -I my_openssl_inc, 如果不依賴(lài)可以不寫(xiě), 具體依賴(lài)目錄可以在configure.in中編寫(xiě)--with參數(shù)指定

bin_PROGRAMS=footest //生成一個(gè)libfoo的測(cè)試程序,如果不需要?jiǎng)t不必寫(xiě), 最終make install會(huì)cp到prefix目錄的bin下, 如果不想安裝則寫(xiě)為noinst_PROGRAMS
footest_SOURCES=footest.c
footest_LDADD= ./libfoo.la

論壇徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
8 [報(bào)告]
發(fā)表于 2010-06-08 13:04 |只看該作者
回復(fù) 6# olivia2007


抱歉,我說(shuō)錯(cuò)了。這種方式,是用來(lái)編譯不以lib開(kāi)頭的共享庫(kù),或者稱(chēng)為模塊(module)。

而且,這些是用automake的方法,對(duì)于普通的以lib開(kāi)頭的共享庫(kù),如果你用automake和libtool,可以試試

lib_LTLIBRARIES = libfoo.la
libfoo_la_SOURCES = foo.c foo.h

你第一個(gè)帖子里提到的方法一,其實(shí)也是用了automake,只不過(guò),他是沒(méi)有用automake自帶的生成共享庫(kù)的方法。所以,他把lib_LTLIBRARIES換成了module_PROGRAMS

論壇徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
9 [報(bào)告]
發(fā)表于 2010-06-08 13:07 |只看該作者

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2010-06-08 13:32 |只看該作者
回復(fù) 9# EricFisher


    好,謝謝你!
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP