你能否强制从静态库中链接未被引用的代码?

3
这是情况 - 我创建了一个自定义的NSView子类,实现在静态库中。该类从未被最终可执行文件引用,只从Interface Builder XML文件中引用。由于它没有被引用,因此在链接时不会被包含,在运行时也找不到该类。
有没有办法强制将其链接起来,而不是动态链接或直接将类编译到可执行文件中?
3个回答

1
你可以在代码中使用class类方法,它大部分时间会是无操作的,但可以从你的代码中引用它。
int main(int argc, const char** argv)
{
    [MyClass class]; // There you are! MyClass is now referenced from your code.

    /* ... rest of your main function ... */
}

这是个好主意。那会把所有功能也引进来吗,还是我必须以某种方式引用所使用的入口点? - Xtapolapocetl
@Matt Spong:它会带来整个类以及类或其实例使用的一切。 - zneak

0

-1

你可以在可执行文件中创建一个指向有问题的类的指针,这样就可以强制其运行而不需要分配内存等操作。


那也可以。我问了上面回答的同样问题 - 这样做会带入函数吗,还是我也需要引用它们?无论哪种方式,这看起来都回答了我的问题。我假设如果我需要明确地这样做,取一个函数的地址应该足以强制链接器将其包含在内。不需要实际调用它。 - Xtapolapocetl
如果您已经引用了该类,编译器将需要理解整个对象而不仅仅是其中的某一部分,因此,是的,只要创建一个指向该类的指针就应该强制链接器将其全部包含。 - Jon Cage

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接