Objective c 目的-C和C

Objective c 目的-C和C,objective-c,c,compiler-errors,Objective C,C,Compiler Errors,我尝试使用libmsrp,但当我尝试编译库时,出现以下错误: $ make so gcc -ggdb -shared -Wl,-soname,libmsrp.so.0 -o libmsrp.so.0.0.2 msrp.o msrp_session.o msrp_message.o msrp_relay.o msrp_switch.o msrp_callback.o msrp_network.o msrp_utils.o -Wall -Wstrict-prototypes -Wmissing-pr

我尝试使用libmsrp,但当我尝试编译库时,出现以下错误:

$ make so
gcc -ggdb -shared -Wl,-soname,libmsrp.so.0 -o libmsrp.so.0.0.2 msrp.o msrp_session.o msrp_message.o msrp_relay.o msrp_switch.o msrp_callback.o msrp_network.o msrp_utils.o -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations  -lpthread
ld: unknown option: -soname
collect2: ld returned 1 exit status
make: *** [so] Error 1
$ make so
gcc -ggdb -shared -Wl,-dylib_install_name -Wl,libmsrp.dylib.0.0.2 -o libmsrp.dylib.0.0.2 msrp.o msrp_session.o msrp_message.o msrp_relay.o msrp_switch.o msrp_callback.o msrp_network.o msrp_utils.o -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations  -lpthread <p>
Undefined symbols:<p>
"_main", referenced from:
start in crt1.10.5.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [so] Error 1
因此,我将-soname选项更改为-dylib\u install\u name-Wl。编译后,我出现以下错误:
$ make so
gcc -ggdb -shared -Wl,-dylib_install_name -Wl,libmsrp.dylib.0.0.2 -o libmsrp.dylib.0.0.2 msrp.o msrp_session.o msrp_message.o msrp_relay.o msrp_switch.o msrp_callback.o msrp_network.o msrp_utils.o -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations  -lpthread <p>
Undefined symbols:<p>
"_main", referenced from:
start in crt1.10.5.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [so] Error 1
声明:

#define MSRP_LIST_FREE(list, lock
if(!(list))
    return 0;
else {
    typeof((list)) temp = list, next = NULL;
    while(temp) {
        next = temp->next;
        MSRP_LIST_REMOVE((list), (lock), temp);
        temp = next
    }
}

有什么想法吗?

也许,makefile处理一些定义,这些定义在您从源代码编译时没有设置。 您应该继续与make进行斗争,以使其能够编译; 也许,你应该尝试使用gmake而不是make。

-soname应该是-install\u name,我认为不是-dylib\u install\u name。在任何情况下,当我进行更改时,它编译得很干净

这是我的make文件中的内容:

gcc -ggdb -shared -Wl,-install_name,libmsrp.so.0 -o libmsrp.so.0.0.2 ... etc.

我试过你的主意,但没用。正如您所写,我修改了Makefile,然后运行makeso命令。gcc-ggdb-shared-Wl-install_name,libmsrp.so.0-o libmsrp.so.0.0.2 msrp.o msrp_session.o msrp_message.o msrp_relay.o msrp_switch.o msrp_callback.o msrp_network.o msrp_utils.o-Wall-Wstrict原型-Wmissing原型-Wmissing声明-lpthread未定义符号:_main,引用自:crt1.10.5中的开始。o ld:未找到符号集合2:ld返回1退出状态make:**Error 1任何想法?是的,它确实有效。我下载了软件包,做了修改,它编译得很好。你一定改变了什么。我试着…我删除了每个文件,取消了存档,重新启动了我的mac。我从网站上下载了图书馆。我替换了命令:$CC-ggdb-shared-Wl,-install_name,libmsrp.so.0-o libmsrp.so.0.2$OBJS$OPTS$LIBS编译它:make all,但我得到了相同的错误:未定义的符号:_main,引用自:crt1.10.5中的start。您使用10.5还是10.6 os x?我使用10.5我使用10.6和Xcode 3.2.3。我想这可能就是不同之处。您应该检查您的链接器文档手册,查看设置内部安装路径的选项。还可以尝试gcc-ggdb-shared-Wl,-dylib,-Wl,-install_name,libmrsp.so.0。。。