菜鸟教程小白 发表于 2022-12-12 16:14:00

ios - 两次导入header : duplicate symbol for architecture x86_64


                                            <p><blockquote>
<p>duplicate symbol _webViewManager in:
      app/Build/Intermediates/app-name.build/Debug-iphonesimulator/app-name.build/Objects-normal/x86_64/PostsShowViewController.o
      app/Build/Intermediates/app-name.build/Debug-iphonesimulator/app-name.build/Objects-normal/x86_64/FirstViewController.o
ld: 1 duplicate symbol for architecture x86_64 clang: error: linker
command failed with exit code 1 (use -v to see invocation)</p>
</blockquote>

<p>我在尝试编译时遇到上述错误。
当我尝试在两个不同的 ViewController 中导入一个名为 <code>WebViewManager.h</code> 的文件时,就会发生这种情况。</p>

<p><em>WebViewManager.h</em></p>

<pre><code>#import &lt;UIKit/UIKit.h&gt;

@interface WebViewManager : NSObject

@property (strong, nonatomic) UIWebView *webView;

+ (id)getUniqueWebViewManager: (UIViewController *)container;
- (void)loadUrlWithString: (NSString *)urlString;
- (void) removeWebViewFromContainer;

@end
</code></pre>

<p><em>FirstViewController.m</em></p>

<pre><code>#import &#34;FirstViewController.h&#34;
#import &#34;PostsShowViewController.h&#34;
#import &#34;Constants.h&#34;
#import &#34;AppDelegate.h&#34;
#import &#34;WebViewManager.h&#34;
</code></pre>

<p><em>PostsShowController.m</em></p>

<pre><code>#import &#34;PostsShowViewController.h&#34;
#import &#34;FirstViewController.h&#34;
#import &#34;AppDelegate.h&#34;
#import &#34;WebViewManager.h&#34;
</code></pre>

<p>同样,如果我在多个地方尝试 <code>#import "Constants.h"</code> 也会出现同样的错误。</p>

<p>编辑:</p>

<p><em>Constants.h</em></p>

<pre><code>NSString *BASE_URL = @&#34;google.com&#34;;
</code></pre>

<p><strong>编辑2:</strong></p>

<p>WebViewManager 出现次数:</p>

<p><strong>FirstViewController.m</strong></p>

<pre><code>@implementation FirstViewController

WebViewManager *webViewManager;
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您忘记在头文件中使用 <code>extern</code>,因此每个包含 <code>Constants.h</code> 的实现文件都在声明自己的 <code>BASE_URL</实例</code>.</p>

<p>你想要:</p>

<pre><code>extern NSString *BASE_URL
</code></pre>

<p>这在 <code>Constants.m</code> 中:</p>

<pre><code>NSString *BASE_URL = @&#34;google.com&#34;;
</code></pre>

<p>或者,您也可以在 <code>Constants.h</code> 中使用它:</p>

<pre><code>#define BASE_URL @&#34;google.com&#34;
</code></pre>

<p>忘记 <code>Constants.m</code>。</p>

<p><strike>但是我没有足够的信息告诉你为什么链接器提示 <code>webViewManager</code>。</strike></p>

<p>好的,第 2 部分:</p>

<p>问题是有多个名为 <code>webViewManager</code> 的全局符号,因为您错误地声明了它们。使用:</p>

<pre><code>@interface FirstViewController : UIViewController {
    WebViewManager *_webViewManager;
}
</code></pre>

<p>(其他类也一样)。这使得它们<em>实例变量</em>,而不是全局变量。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 两次导入header : duplicate symbol for architecture x86_64,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/32399668/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/32399668/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 两次导入header : duplicate symbol for architecture x86_64