我有一个C应用程序,我正在尝试为Mac OS X 10.6.4编译:
$ uname -v
Darwin Kernel Version 10.4.0: Fri Apr 23 18:28:53 PDT 2010; root:xnu-1504.7.4~1/RELEASE_I386
Run Code Online (Sandbox Code Playgroud)
我的gcc情况如下:
$ gcc --version
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)
Run Code Online (Sandbox Code Playgroud)
我的Makefile情况如下:
CC=gcc
CFLAGS=-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -O3 -Wformat -Wall -pedantic -std=gnu99
all: myApp
rm -rf *~
myApp: myApp.o
${CC} ${CFLAGS} myApp.o -lbz2 -o myApp
rm -rf *~
clean:
rm -rf *.o myApp
Run Code Online (Sandbox Code Playgroud)
问题是我的应用程序调用fseeko64和fopen64,并使用off64_t类型进行偏移.当我编译我的应用程序时,我收到以下警告和错误:
$ make myApp
gcc -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -O3 -Wformat -Wall -pedantic …Run Code Online (Sandbox Code Playgroud) 我使用Mac Mini作为构建代理,我需要升级标准库.我在MacPorts上找不到libc或libstdc ++.
MacO 10.6,如果我有一个文件"unwanted.c",其中包含:
class secret_thing {
public:
secret_thing() {}
void revealing_method_name() {}
};
main()
{
secret_thing obj;
obj.revealing_method_name();
}
Run Code Online (Sandbox Code Playgroud)
现在我做:
$ g++ unwanted.c -o unwanted
$ strip unwanted
$ nm unwanted | grep secret
0000000100000eb8 T __ZN12secret_thing21revealing_method_nameEv
0000000100000eae T __ZN12secret_thingC1Ev
Run Code Online (Sandbox Code Playgroud)
如果我分离出秘密类的接口和实现,就像大多数人在编写C++代码时那样,那么剥离的可执行文件中就没有不需要的符号.可悲的是,我交给了现有数千行代码的代码库,这不是我的选择之一.
我试过-fno-rtti,作为一个疯狂的猜测,并没有解决任何问题.我已经向谷歌众神祈祷并发现许多对脱衣舞俱乐部的引用,但没有任何有用的链接.我已经在mac上浏览了strip,g ++和ld的手册页,并且没有明显的尝试,尽管"私人外部"一词很有趣,我无法弄清楚该怎么做.
[更新]可悲的是,我试图做一个小例子后出现问题.这是一个更复杂的例子,它更接近真正的问题,如果它是经过优化的,它仍然有不需要的符号.
我为坏的例子道歉.事实证明,很难找到最小的实际问题.非常感谢答案,但每个答案都让我接近解决方案.
class base {
public:
virtual int revealing_method_name() = 0;
virtual ~base() {};
};
class secret_thing : public base {
public:
int revealing_method_name() { return 0; };
};
class other_thing : public base {
public:
int revealing_method_name() …Run Code Online (Sandbox Code Playgroud) 所以我知道boost库主要是仅限头文件,但有一些需要编译,例如Boost.Thread.在Darwin中,如何编译这些并传递-m32标志,以便将它们编译成32位(i386)二进制文件?有这个Jamroot的东西,我从来没有听说过,我不知道从哪里开始.
澄清:我不是问如何使用-m32标志编译程序并使用boost库.我问如何使用-m32标志编译Boost库本身.
在Linux上,sched.h包含的定义
int sched_rr_get_interval(pid_t pid, struct timespec * tp);
获得流程的时间片.但是,OS X El Capitan附带的文件不符合该定义.
在OS X上有替代方案吗?
我正在玩swift,并有以下简单的代码
我想检查"sqrt"函数是如何实现的,所以我试图点击"Darwin.C.math"链接但没有任何反应.我用谷歌搜索了"斯威夫特达尔文苹果文档",但没有关于"达尔文"的消息.那么有人可以告诉我,我如何找到"sqrt"功能的文档?
在java中,当我单击类名或方法名时,将出现源代码文件,其中包含有关如何实现方法和类的所有详细信息.但我似乎无法对swift/xcode做同样的事情.
前言:这个问题是关于基本的手册页,这些手册页似乎已经从互联网上消失了。这不是推荐或查找书籍,工具,软件库,教程或其他非现场资源的请求。
Apple删除了所有手册页,或者我只是在它们的新位置(特别是macOS)找不到它们-好像它们只是在方便地将其删除一样。
// The page you’re looking for can’t be found.
Run Code Online (Sandbox Code Playgroud)
他们去哪了?在Terminal中,可以通过进行操作man,尽管我正在网上寻找。
我想将xnu内核移植到ARM架构,最终目标是能够在Qemu中运行完整的内核.虽然我确实意识到这是一项非常艰巨的任务,但我仍然想要了解它.
据我所知,你打算为内核(osfmk/arm/start.s)编写一个入口点,在那里你可以进行一般初始化(MMU和PlatformExpert),之后可以启动Kext/IOKit子系统并加载CPU特定的扩展(即陷阱, GPIO,时钟),它们预先链接到二进制文件或由引导加载程序加载(因为由于NAND扩展尚不可用,内核无法与文件系统交互).
虽然我对ARM CPU如何工作有一个大概的了解,但我甚至不知道从哪里开始使用该xnu端口,因为我不完全确定如何:
osfmk/kern正在工作).machine_startup());osfmk/platform_name但有些代码必须集成到osfmk/kern其他代码中).是否有任何关于将XNU(或至少Mach)内核移植到不同平台的指南,就像Linux指南一样?
问题概述
我正在尝试学习如何在gcc针对i386-apple-darwin(32位Intel)的64位Intel OS X主机上构建交叉编译器,特别是GNU 4.7.2 版本.但是,我一直陷入同样的错误:
...
checking for i386-apple-darwin-gcc... /Users/alexpreynolds/Developer/third-party/build-gcc/./gcc/xgcc -B/Users/alexpreynolds/Developer/third-party/build-gcc/./gcc/ -B/Users/alexpreynolds/Developer/third-party/i386-apple-gcc/i386-apple-darwin/bin/ -B/Users/alexpreynolds/Developer/third-party/i386-apple-gcc/i386-apple-darwin/lib/ -isystem /Users/alexpreynolds/Developer/third-party/i386-apple-gcc/i386-apple-darwin/include -isystem /Users/alexpreynolds/Developer/third-party/i386-apple-gcc/i386-apple-darwin/sys-include
checking for suffix of object files... configure: error: in `/Users/alexpreynolds/Developer/third-party/build-gcc/i386-apple-darwin/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
make[1]: *** [configure-target-libgcc] Error 1
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)
构建过程
我首先构建一个GNU binutils目标版本,i386-apple-darwinGNU gcc构建文件夹可以访问它:
$ cd third-party
$ wget http://ftp.gnu.org/gnu/binutils/binutils-2.23.2.tar.bz2
$ tar xjvf binutils-2.23.2.tar.bz2
$ mkdir i386-apple-darwin
$ mkdir …Run Code Online (Sandbox Code Playgroud) 我在 AWS 控制台中注意到,我们的网站收到的请求比平时多得多。特别是在夜间(欧洲时间)。
然后我检查了 nginx 日志,现在我知道许多具有不同 IP 地址的设备请求网站的根目录,其中大多数使用用户代理swcd (unknown version) CFNetwork/978.0.7 Darwin/18.7.0。有时其中一个版本不同。
我完全不知道发生了什么,所以我希望有人可以提供帮助。