如何让Objective-C项目在Ubuntu上运行?
我的文件是:
Fraction.h
#import <Foundation/NSObject.h>
@interface Fraction: NSObject {
int numerator;
int denominator;
}
-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
-(int) numerator;
-(int) denominator;
@end
Run Code Online (Sandbox Code Playgroud)
Fraction.m
#import "Fraction.h"
#import <stdio.h>
@implementation Fraction
-(void) print {
printf( "%i/%i", numerator, denominator );
}
-(void) setNumerator: (int) n {
numerator = n;
}
-(void) setDenominator: (int) d {
denominator = d;
}
-(int) denominator {
return denominator;
}
-(int) numerator {
return numerator;
}
@end
Run Code Online (Sandbox Code Playgroud)
的main.m
#import <stdio.h>
#import …Run Code Online (Sandbox Code Playgroud) 我已经尝试使用py2exe(与ipy不兼容)和PYC(过时).任何人都可以指向一个好的编译器的方向?
请多多包涵.我真的想知道,因为我对答案感到好奇:
是否有一种智能方法可以在编译时知道要链接到的库的名称?
请允许我举一个例子,说明我的问题的原因.
我是C++新手.我正在学习编译,链接和像boost这样的库.我刚刚发现了boost/filesystem并想尝试一下.遇到麻烦编译后,我使用了以下极简主义代码:
// file boost_example.cpp
#include "boost/filesystem.hpp"
#include <iostream>
int main()
{
std::cout<<"Hello";
return 0;
}
我试图编译它,但作为一个新手,我犯了一个新手错误:我忘了链接到正确的库!
Run Code Online (Sandbox Code Playgroud) g++ boost_example.cpp -o run
确切地说,我遇到了本书这一章中解释的问题.
我知道我已经安装了升级版(我被告知安装它来编译另一个项目).我试图从其他项目的Makefile中复制,但以下不起作用:
g++ boost_example.cpp -o run -lbooster
尝试从代码中的#include行做出有根据的猜测,我尝试了以下无效:
g++ boost_example.cpp -o run -lboost
到那时,我已经开始了疯狂地搜索网页.我讨厌搜索引擎,因为大多数时候,你找不到你正在寻找的东西.我找到了以下内容,但他们没有帮助,只是浪费我的时间: g++ boost_example.cpp -o run -lboost_filesystem
在kubuntu C++/Boost链接器错误下提升库链接问题
由于我是一名RTFM人,我实际上已经检查了我想要使用的库的官方文档:http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/index.htm但是我没有找到任何编译信息.
在某个阶段,我受到启发,检查我在系统上实际安装的内容:
Run Code Online (Sandbox Code Playgroud)
因此,我找到了要链接的库的正确名称.以下工作:
$ locate boost_file
/usr/lib/libboost_filesystem-mt.a
/usr/lib/libboost_filesystem-mt.so
/usr/lib/libboost_filesystem-mt.so.1.38.0
g++ boost_example.cpp -o run -lboost_filesystem-mt
现在,除了使用(可能)智能猜测工作和搜索网络之外,是否有更智能的方法来查找要链接的库的名称?我永远不会猜到boost_filesystem-mt给出标题的库名"boost/filesystem.hpp".
更糟糕的是:官方网站上没有提到boost_filesystem-mt!(我猜这是依赖于发行/包装).
再一次,在提出问题之前,我总是提出RTFM,我找到了上述书中的这一章,所以我在/ usr/lib /上查看了我在系统上可以找到的内容:
$ ls …
我试图在Centos 6.2上多次编译GnuTLS库,但没有运气.这些是步骤:
我下载了Nettle 2.4
[root@localhost opt]# wget http://www.lysator.liu.se/~nisse/archive/nettle-2.4.tar.gz
[root@localhost nettle-2.4]# tar zxvf nettle-2.4.tar.gz
[root@localhost nettle-2.4]# cd nettle-2.4
[root@localhost nettle-2.4]# ./configure --enable-shared --prefix=/usr
Version: nettle 2.4
Host type: x86_64-unknown-linux-gnu
ABI: 64
Assembly files: x86_64
Install prefix: /usr
Library directory: ${exec_prefix}/lib64
Compiler: gcc
Shared libraries: yes
Public key crypto: no
Run Code Online (Sandbox Code Playgroud)
我运行命令make和make install
我下载了最新的GnuTLS
./configure --with-libnettle-prefix=/usr
hecking for shared library run path origin... done
checking whether to use nettle... yes
checking for libnettle... no
configure: error:
***
*** Libnettle 2.4 …Run Code Online (Sandbox Code Playgroud) 我试图通过Emacs的编译模式编译u-boot,看起来Emacs不知道如何找到bash环境变量.即使我设置了它们,并且可以通过Emacs shell仿真进行编译,编译模式仍然会尝试编译,就好像它们不存在一样.
我需要做些什么来使其更具环保意识?
我正在使用Learning OpenCV学习OpenCV.
编译代码时我遇到的一个问题是我必须编写一个很长的命令来编译并获取可执行文件.
这是我正在使用的命令
g++ `pkg-config –cflags opencv` file_name.cpp -o output_file `pkg-config –libs opencv`
Run Code Online (Sandbox Code Playgroud)
我没有制作专家,但我想我可以消除写使用很长的命令作出.在此之前,我应该解释我的工作流程.我在我的主目录(~/opencv/)中创建了一个名为opencv的目录.我正逐节阅读本书,并将示例或练习编码到该目录中的新cpp源代码文件中.所以我不知道手头的文件名.
现在我想要做的是,
假设我编写了一个facedetect.cpp在我的opencv目录中命名的新文件,如果我调用make就像这样
make facedetect
Run Code Online (Sandbox Code Playgroud)
然后我想让make为我执行以下命令
g++ `pkg-config --cflags opencv` facedetect.cpp -o facedetect `pkg-config --libs opencv`
Run Code Online (Sandbox Code Playgroud)
所以每当我创建一个名为abc.cpp的新文件时,我都会执行make abc
以便我可以运行
$ ./abc
Run Code Online (Sandbox Code Playgroud)
在我的命令行测试我的abc.cpp
请给出make文件,这样我就可以省去每次输入那个长命令的挫败感.
PS:我用Google搜索的帮助就这个问题和发现这种使用CMake的,但我不明白是什么一样.还请解释如何使用CMake执行相同的任务.
while (condition) {
if (condition) {
statement1;
statement2;
break;
} else {
statement3;
statement4;
}
}
Run Code Online (Sandbox Code Playgroud)
通过break在if子句中使用,我们确保循环停止并退出.
我不明白break语句如何"知道"它是否在一个循环中,它首先退出,或者它如何"知道"跳转到哪里.这是怎么发生的?
我在一个目录下的主程序包中有一些文件:
main.go config.go server.go
当我这样做:"去构建"程序构建完美,运行良好.当我这样做:"去运行main.go"它失败了.
输出:
# command-line-arguments
./main.go:7: undefined: Config
./main.go:8: undefined: Server
Run Code Online (Sandbox Code Playgroud)
未定义的符号是结构,它们是大写的,因此应该导出.
我的Go版本:go1.1.2 linux/amd64
对于一个项目,我需要创建一个可执行文件,其中包含我使用的所有库(opencv,cgal),以便在没有这些库的计算机上执行它.目前,这是我的CMakeLists.txt(我使用的是linux).
cmake_minimum_required(VERSION 2.8)
#set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall -O2")
project( labeling )
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
add_library(OpenCV STATIC IMPORTED)
add_library(CGAL STATIC IMPORTED COMPONENTS Core)
add_library(GMP STATIC IMPORTED)
find_package(OpenCV REQUIRED)
find_package(CGAL QUIET COMPONENTS Core )
find_library(GMP_LIBRARY gmp /usr/lib)
include(src)
include( ${CGAL_USE_FILE} )
include( CGAL_CreateSingleSourceCGALProgram )
set(EXECUTABLE_OUTPUT_PATH ../bin)
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")
include_directories( src )
include_directories( ${OpenCV_INCLUDE_DIRS} )
file(GLOB_RECURSE nei_SRC "src/*.cpp")
add_executable( nei_segmentation ${nei_SRC})
target_link_libraries( nei_segmentation ${OpenCV_LIBS} ${GMP_LIBRARY})
Run Code Online (Sandbox Code Playgroud)
以这种方式,我的可执行文件中只包含GMP和其他一些c ++库.我的问题是:我如何创建一个makefile,以便以静态方式自动包含所有库,并只创建一个包含所有库的"大"可执行文件?你能帮助我吗?
compilation ×10
c++ ×3
c ×2
cmake ×2
makefile ×2
opencv ×2
build ×1
cgal ×1
emacs ×1
go ×1
ironpython ×1
java ×1
libraries ×1
linked-list ×1
linker ×1
linux ×1
loops ×1
object-files ×1
objective-c ×1
ubuntu ×1