标签: linker-flags

附加到CMAKE_C_FLAGS

我正在使用CMake进行两个版本的项目,其中一个需要-lglapi而另一个则不需要.

到目前为止,我们使用的线条看起来像这样:

SET(CMAKE_C_FLAGS "-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm")
SET(CMAKE_CXX_FLAGS "-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm")
Run Code Online (Sandbox Code Playgroud)

我在我的CMakeList.txt中添加了一个if语句,紧跟在这些行之后:

if(SINGLE_MODE)
    SET(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} " -lglapi")
    SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} " -lglapi")
endif(SINGLE_MODE)
Run Code Online (Sandbox Code Playgroud)

SINGLE_MODE变量定义了一点点.当我使用message命令显示标志变量的内容时,它看起来没问题:

-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm -lglapi
Run Code Online (Sandbox Code Playgroud)

但是当我开始编译时,我遇到了编译错误.使用详细模式我意识到在编译器调用中看起来像:

-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm; -lglapi
Run Code Online (Sandbox Code Playgroud)

也就是说,在将-lglapi添加到列表之前添加了分号.

这里有没有人遇到类似的问题,并知道解决这个问题的方法?我用谷歌搜索了很长一段时间并研究了CMake手册,但看不出我在这里做错了什么.

谢谢,托比亚斯

c c++ cmake compiler-flags linker-flags

14
推荐指数
2
解决办法
2万
查看次数

Xcode构建设置中缺少其他链接器标志

正如标题所示,我进入我的应用程序的构建设置,并搜索"其他链接标志",没有什么是回归.如果我甚至只搜索"其他",则没有"其他链接标志"部分.我在网上看到了其他这种情况,但没有找到解决方案.我怎样才能找到其他链接标志?

所有帮助赞赏.

xcode linker objective-c ios linker-flags

11
推荐指数
1
解决办法
6894
查看次数

什么是gcc链接器映射文件用于?

gcc/g ++链接器选项"-Map"用于生成什么".map"文件?以及如何阅读它们?

linker gcc g++ linker-flags

10
推荐指数
2
解决办法
1万
查看次数

构建阶段之间的区别 - >链接二进制文件与库或构建设置 - >链接器标志

Build Phases - > Link Binary与Libraries或Build Settings - > Linker Flags有什么区别?

前者似乎不允许您在Debug与Release之间进行指定,并且其中指定的框架似乎也与后者不匹配.

注意:我已经检查了SO上的现有帖子,但没有找到能够准确回答这个问题的帖子.

build-settings linker-flags xcode8

10
推荐指数
1
解决办法
759
查看次数

pic Vs馅饼之间的差异

我正在寻找二进制加密代码生成的选项,并找到两个可用的PIC和PIE选项.我试图找到两者之间的差异,但没有找到合适的文章.如果有人可以通过例子与专业人士和玉米来解释差异,或者提供好文章的链接将是很好的学习.

我的基本动机是保护已编译的代码,因为ELF/PE格式可能受到病毒的攻击,或者可能被黑客入侵,或者在反向技术的帮助下可以重新生成代码.还要提供任何其他方法来保护编译代码免受攻击和d-compling.

我正在使用GCC Compiler通过Cygwin构建跨平台应用程序.

c c++ shared-libraries linker-flags

9
推荐指数
1
解决办法
2万
查看次数

如何使CMake附加链接器标志而不是前置它们?

CMake似乎在GCC编译命令的前面添加链接器标志,而不是在末尾附加它.如何使CMake附加链接器标志?

这是一个重现问题的简单示例.考虑使用以下C++代码clock_gettime:

// main.cpp
#include <iostream>
#include <time.h>

int main()
{
    timespec t;
    clock_gettime(CLOCK_REALTIME, &t);
    std::cout << t.tv_sec << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是一个CMakeLists.txt来编译上面的C++文件:

cmake_minimum_required(VERSION 2.8)
set(CMAKE_EXE_LINKER_FLAGS "-lrt")
add_executable(helloapp main.cpp)
Run Code Online (Sandbox Code Playgroud)

请注意,我们已添加,-lrt因为它有定义clock_gettime.

使用以下方法编译:

$ ls
  CMakeLists.txt main.cpp
$ mkdir build
$ cd build
$ cmake ..
$ make VERBOSE=1
Run Code Online (Sandbox Code Playgroud)

即使您可以-lrt在命令中看到,这会引发此错误:

/usr/bin/c++ -lrt CMakeFiles/helloapp.dir/main.cpp.o -o helloapp -rdynamic 
CMakeFiles/helloapp.dir/main.cpp.o: In function `main':
main.cpp:(.text+0x15): undefined reference to `clock_gettime'
collect2: ld returned 1 exit status
make[2]: *** …
Run Code Online (Sandbox Code Playgroud)

linker gcc cmake linker-flags

9
推荐指数
1
解决办法
7697
查看次数

Xcode如何从编译中排除FOLDERS?

我在stackO中看到了这个和答案,但没有找到如何排除文件夹.

我有3个文件夹,有很多.h,.m和.mm,我需要暂时排除它们,但不要删除引用.我怎样才能做到这一点?

xcode compilation build project linker-flags

8
推荐指数
3
解决办法
3902
查看次数

gcc:错误:无法识别的选项 --wrap

[更新] 很抱歉置顶,但首先了解这一点可能会有所帮助,因为它可能会改变问题。

\n\n

--wrap是链接器的一个选项ld,而不是gcc

\n\n

但我的 Eclipse 项目用于gcc链接阶段。

\n\n

如何根据cmocka单元测试的需要使用包装函数?

\n\n
\n\n

我在用gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

\n\n

我正在尝试使用此处--wrap指定的链接器选项,以便使用cmocka对 C 代码进行单元测试。

\n\n

错误是

\n\n
make all \nBuilding target: unit_test_C_code_example_project\nInvoking: GCC C Linker\ngcc --wrap=add -o "unit_test_C_code_example_project"  ./test_scripts/test_maths.o  ./software_under_test/mocks/mock_add.o  ./software_under_test/maths.o   -lcmocka\ngcc: error: unrecognized option \xe2\x80\x98--wrap=add\xe2\x80\x99\nmake: *** [unit_test_C_code_example_project] Error 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,链接器抱怨该--wrap=add选项,但我不知道为什么。

\n\n
\n\n

不可避免的是,如果我不发布代码,有人会请求它,所以就在这里,尽管我怀疑它与链接器选项问题相关:

\n\n

在我的单元测试主要中,我有

\n\n
static void test_multiply_two_by_three(void **state)\n{\n    will_return(__wrap_add(0, 2), 2);\n …
Run Code Online (Sandbox Code Playgroud)

gcc linker-errors linker-flags

7
推荐指数
1
解决办法
3519
查看次数

从R内部设置LD_LIBRARY_PATH

我已经安装了R软件包,但是为了通过加载library,需要将LD_LIBRARY_PATH设置为其中一个库(称为libhts.so.2)的路径。只有在进入R之前而不是之后才编辑LD_LIBRARY_PATH时,加载才起作用。

我尝试了几种不同的方法来解决这个问题:

  1. configureR包中的脚本导出修改后的LD_LIBRARY_PATH 。
  2. 在同一configure脚本中创建到共享库的软链接。

两者都不起作用,在我看来,一旦启动R,就有一个变量存储LD_LIBRARY_PATH的结果。也许解决方案是编辑该变量。

unix r linker-flags

7
推荐指数
1
解决办法
5210
查看次数

如何忽略特定库的-Objc标志

在我的项目中,我有大量的静态库.我目前使用-ObjC链接器标志,它将包含实现任何objective-c类的静态库的所有成员.

我有一个特别大的静态库,我特别想要只用于二进制文件中的类(我知道objective-c的动态特性和这样做的注意事项).如果不使用-ObjC,会发生这种情况.

是否可以向链接器指定我希望此特定库不属于-ObjC标志?

如果完成此任务的唯一方法是为我以某种方式弄清楚包含objc的每个其他库添加force_load标志,那将是不幸的.

linker objective-c linker-flags

6
推荐指数
1
解决办法
199
查看次数